企業版IDP,即iOS Development Enterprise Program。注意是$299/Year那種,並非$99/Year的那種。數據庫
這種方式的IDP其最大的好處在於:能夠發佈「In House」應用。windows
這種應用使用一種叫作「In House Distribution Provisioning Profile」的文件進行發佈,不能發佈到Apple Shop進行銷售,也不須要通過Apple的評審。你能夠把「In House」應用經過任何方式發佈給你的企業員工、用戶及其餘你承認的任何人,尤爲適合於企業應用的開發。安全
網上關於我的版/公司版IDP申請流程,以及將應用發佈到蘋果商店的介紹有不少,但關於企業版IDP以及In House應用的討論很是之少(尤爲國內)。下面,筆者將對這兩方面的問題進行一個全面細緻的介紹。網絡
一、申請Apple IDapp
這個步驟就不說了。dom
二、申請鄧白氏編碼ide
鄧氏編碼是美國聯邦政府推薦使用的企業機構編碼。能夠當作是美國版的「組織機構代碼」,只不過已經獲得了聯合國、澳大利亞政府、歐盟及美國政府的認可,成爲了全球企業標準。工具
蘋果公司須要鄧氏編碼才能申請IDP企業版。這倒不是對國內企業的歧視,而是出於的美國商業習慣。在美國全部的採購合同和商業合同中,都會要求供應商提供一個DUNS(鄧氏編碼),不然對方可能不會跟你籤合同。由於全部的美國企業都使用D&B公司的數據庫,這樣才能保證全部企業編碼不會重複。網站
申請鄧氏編碼在D&B公司的網站便可:ui
http://www.dunsregistered.com/
中文網站「華夏鄧白氏」:
在網站上提交註冊申請後,等待1-2天,對方人員會跟你聯繫(Email)。
原來覺得申請會很麻煩(交流上),但其實是由華夏鄧白氏的中籍文員跟你聯繫的。
鄧白氏註冊服務有幾個版本,收費狀況也不同。筆者一開始收到的郵件是「實地核實」的版本,報價15200/2年。
後來經與北京蘋果聯繫,只須要購買最基本的「標準版」便可,報價8600元/2年, 有網友說2000-3000元/年,如今看來是不可能了 ,在這個物價飛漲的年代:-(。
聯繫時必定要強調是購買標準版服務(最便宜),不然你可能會花冤枉錢。
收到郵件後,把申請表、協議打印出來,填好並加蓋公章,而後加上企業營業執照副本、掃描爲電子的,發給對方郵箱。
其實還有一個就是匯款水單(小票),須要發送給對方。這一步其實能夠省略。筆者申請時並無email匯款水單 ,只要對方確認匯款到賬便可。
大約5-7天后,對方發來第2封郵件,告訴你貴公司的編碼。此外還能夠在網站上安裝一個鄧白氏電子標識——在網頁上嵌入指定腳本,則會在頁面上顯示一個D&B圖標,點擊圖標自動連接到D&B的網站並呈現大家公司的電子註冊信息。
三、申請IDP企業版
登陸蘋果開發者網站iOS Dev Center,申請Apple Developer Program,只不過此次選擇的是iOS Enterprise Program連接(在頁面底部)。
點擊Apply Now,下一頁Continue,下一頁選擇「Use an existing Apple ID」,Continue。
下一頁,輸入你的Apple ID、密碼登陸。
後面就是確認註冊協議和填寫你的公司資料了(英文)。內容最好同鄧氏的同樣,不然對方會打電話來確認,須要更改。
填寫完公司資料,還要填寫委託人聯繫資料。注意委託人應該有表明公司簽字的受權(公司承認,他們會在電話裏確認)。
提交資料後,能夠在郵箱裏收到蘋果的郵件,內容大概是感謝你提交了申請,申請的編號是多少,公司名稱、郵箱地址等等,若是你想看評審流程,能夠登陸Member Center。
接下來就是等待蘋果的電話了。
這個過程大概要2-3天,對方會安排懂中文的人員來電話,若是沒什麼問題,接下來(電話以後幾分鐘)會收到蘋果的第2封郵件,大意是要你點擊郵件中的連接,查看一個協議(我不知道這個協議和第1個協議有什麼不一樣,反正我直接點贊成了)。
協議贊成後,顯示一個頁面,大意是你所申請的國家不支持在線購買蘋果產品(在線支付),須要你下載一個pdf的purchase form:
將它打印出來,根據要求填好,而後傳真給蘋果。
注意,國內信用卡支持美圓支付的通常是Visa卡(如招行)和Master卡(如交行),必定要找那種卡上印有「Visa」或」Master」標誌的信用卡。
Cvc2 code是指信用卡背面的那串數字(7位)的末3位。
信用卡地址寫申請信用卡時登記的地址。
由於公司的傳真機沒法發送國際傳真,我將purchase form掃描後發給了亞洲蘋果 chinadev@asia.apple.com, 請其轉交給 Billing 團隊。
亞洲蘋果幾分鐘後自動回覆了一封郵件,並在信中附了一個業務流水號: Follow-Up: 149653 xxx
下次再給亞洲蘋果聯繫時,能夠附上這個業務流水號。
而後3-5個工做往後,約早上6點多收到扣費成功短信(信用卡提供的功能)。登陸郵箱後,果真收到了蘋果的2封email,1封是發票,上面有你的發票號碼,單位報帳的時候把這封郵件內容打印出來就能夠了。另1封是激活郵件,告訴你如今你的idp賬號已經生效了,你點擊那個「login now」按鈕能夠登陸到member center,這時能夠看到你的developer program overview的狀態已經改變。同時,Peoples中會包含一個成員,這個成員就是你註冊IDP時所綁定的開發者賬號(Apple ID),同時也是該IDP的Team Admin或Agent。
四、製做iOS 開發者證書
4.1 在本機生成證書請求CSR
打開「鑰匙串」應用程序,修改偏好設置以下圖所示:
選擇菜單「鑰匙串訪問 -> 證書助理-> 從證書頒發機構求證書」.
注意,若是此時密鑰中的某個私鑰處於選中狀態,則菜單會變爲「鑰匙串訪問->證書助理->用<私鑰>從證書頒發機構求證書」,這樣製做出來的CSR是無效的。
輸入你的email地址和名字。確保email地址和名字與你註冊爲iOS開發者時登記的相一致。
勾選Saved to Disk(保存到磁盤)及Let me specify key pair information(指定密鑰對信息),而後點Continue。
當選擇了Let me specify key pair以後,會要求你指定文件保存位置。接下來按下圖所示指定密鑰對信息:
Continue,即生成了CSR文件。一旦生成CSR,在「登陸」鑰匙串中會生成一對密鑰對(一個私鑰,一個公鑰)。你能夠在鑰匙串的密鑰欄中查看。
4.2 提交CSR文件
用企業版IDP綁定的Apple ID( 跟製做CSR時要求輸的的可能不一致,這裏是註冊企業版時綁定的iOS開發者賬號,即Agent)登陸iOS Provision Portal 。
點擊「Certificates-> Development」 中的 「Add Certificate」按鈕。
接下來點擊最下面的「Choose file」按鈕,選擇所生成的CSR文件,而後點 「Submit」。若是密鑰長度未設置未2048,Portal會拒絕CSR。
提交CSR後,Team管理員(Agent)會收到一封提醒郵件,主題爲 Certificate Request Requires Your Approval,提示你須要去贊成該CSR。此時Agent須要登陸Portal去贊成該CSR。但實際上,Agent也可能根本不須要去點「贊成」,Portal幾秒鐘後就自動贊成了——筆者遇到的狀況就是這樣的。
4.3 下載並安裝開發者證書
若是機器上未安裝WWDR證書,請點擊 「Certificate-> Distribution」中的連接「Saved Linked File to Downloads」 ,如下載WWDR證書,並經過雙擊WWDR證書進行安裝。
在「Certificate -> Development」中, 在Your Certificate下會列出當前有效的開發者證書。 點擊「Download」,便可下載到本機。下載後雙擊,便可安裝到本機。 能夠在鑰匙串「證書」一欄中查看到導入的開發證書。
Team 成員只能下載本身的iOS開發證書。Team管理員有權下載全部成員的公有證書。蘋果不接受CSR中的私鑰。私鑰僅對建立者有效,而且必須存儲在系統鑰匙串裏。
4.4 保存私鑰並遷移到其餘系統
若是你在多臺電腦上進行開發或者重裝系統,那麼把私鑰存儲在安全的地方是件很重要的事情。若是沒有私鑰,你沒法在Xcode中籤名代碼並進行真機調試。
鑰匙串在生成CSR時,就會在「登陸」鑰匙串中建立一個私鑰。該私鑰和你的用戶賬號綁定,若是重裝OS致使該私鑰遺失,則該私鑰沒法再次生成。若是你想在多臺電腦上開發和調試,你必須將私鑰導入到每一臺機器上:
在鑰匙串訪問程序中,選擇登陸鑰匙串的「密鑰」。能夠看到有許多密鑰對,選擇與你的開發者證書相對應的私鑰(還記得建立CSR時要你輸入的郵箱地址和名字嗎?那個名字會顯示在私鑰的名字上)。而後選擇菜單「文件->導出項目…」,將私鑰保存爲.p12格式(Personal Information Exchange)。當提示輸入密碼時,設置一個密碼並記住它,它會在導入.p12文件時使用。現住,你能夠把.p12文件拷貝到其餘機器上並雙擊它進行安裝,這時會提示你輸入導出私鑰時設置的密碼。
五、設備IDs
所謂設備ID(device ID又稱UDID)是Apple 設備上的40位16進制碼,每臺Apple設備的device ID都是惟一的,Apple以此來識別不一樣的iOS設備。
咱們經過在Provision Portal中錄入設備的device ID,能夠容許開發者在指定真實設備上進行調試。在Provision Portal中最多容許輸入100個device ID。
所以,錄入device ID是後續製做Provision Profile的必需步驟(而Provision Profile又是真機調試的必需步驟)。
5.1 獲取device ID
兩種獲取device ID的方式:
把Apple 設備(iPhone,iPod)鏈接電腦,打開Xcode的Orgnizer:
把Apple 設備(iPhone,iPod)鏈接電腦,打開iTunes:
那個40位16進制的數字就是device ID。
5.2 添加單個device ID
以Team管理員登陸Provision Portal,點擊Devices頁面中的「Add Device」按鈕,在其中輸入:
Device Name:設備名稱,輸入一個描述該設備的名字。
UDID:即device ID。
點擊提交便可。
六、建立App ID
App ID是識別不一樣應用程序的惟一編碼。若是你的程序要鏈接Apple Push Notification服務(一種push通知),須要用到App ID。若是應用程序之間要共享鑰匙串數據,也會用到App ID。總之,App ID在iOS設備上大量被使用。在這裏App ID的最大用處是製做真機調試用的Provision Profile(它須要提供一個App ID)。
一個App ID有兩部分構成:一個10位字符的Bundle Seed ID前綴,這個Bundle Seed ID由Apple分配,全球惟一,保證不會重複;一個Bundle Identifier後綴,這個Bundle Identifier由Team管理員指派,Apple建議用反域名規則命名這個Bundle Identifier。例如: 8E549T7128.com.apple.AddressBook.
若是你寫了一系列應用程序,它們共用相同的鑰匙串(如共用密碼),或者根本就不使用鑰匙串訪問,你能夠只建立一個App ID,全部的應用程序都使用以星號結尾的App ID。這個星號就是通配符,只能用於App ID最後一個字符。例如,這個App ID能夠是: R2T24EVAEE.com.domainname.* 或者 R2T24EVAEE.*
6.1 建立App ID
以Agent或Team 管理員登陸Provision Portal,點擊「App ID」頁面中的「New App ID」按鈕。
App ID Name:給這個App ID一個名字。若是存在多個App ID,每一個App ID須要一個易於識別的名稱。
App ID:如前面所述,Bundle Seed ID是Apple分配的,其實這裏只須要你輸入Bundle Identifier。可使用統配符*。
七、製做開發者Provision Profile
擁有了開發者證書(Development Certificate),只是代表你有權利在電腦上進行開發,在模擬器上運行程序,但你還不能在iPhone上運行你開發的程序。其實若是你只是在模擬器上調試程序的話,要不要開發者證書都無所謂,由於證書只是用來代碼簽名(Code Sign)的,若是在模擬器上跑的話,你能夠選擇不簽名(don’t code sign)。
若是要在真機上調試就不同了。它須要一個Provision Profile,沒有這個Provision Profile,蘋果設備沒法安裝運行你開發的程序。這個Provision Profile中記錄了一些信息:開發者證書、開發者Apple ID、一系列設備ID(開發者可使用哪幾部設備進行調試)。
7.1 建立開發者Provision Profile
以Agent登陸Provision Portal,在「Provisioning->Development」,點擊「New Profile」按鈕。
Profile Name:輸入Profile的名字,隨意。
Certificate: 選擇開發者證書。
App ID:選擇一個App ID。
Devices:設備ID列表。
點擊「Submit」,即會生成Development Provisioning Profile。
7.2 安裝Development Provision Profile
全部Team成員均可如下載Development Provision Profile。但只有Profile中記錄了設備ID的設備以及iOS開發者證書所指定的開發者可以使用這個Profile。
在Portal的「Provisioning->Development」,點擊某個profile右邊的「download」按鈕。下載profile後,將下載到的文件拖拽到桌面Dock面板的Xcode圖標上(或者直接拖到Xcode的Orgnizer中)。這會將profile文件拷貝到~/Library/MobileDevice/Provisioning Profiles目錄。
7.3 簽名並調試
在Xcode中打開工程,選中 Target,打開info窗口,在Build面板中找到「Code Signing Identify」,打開並點擊下面的「Any iOS Device」 :
在彈出菜單菜單中選擇你的簽名,該簽名應當和一個灰色的Profile對應。這個Profile就是咱們前面安裝的Development Provision Profile。例如,咱們在7.1中建立的Profile 的Profile Name爲My First Development Provisioning Profile,那麼咱們選擇的簽名就是位於「My First Development Provisioning Profile」(顯示爲灰色)下面的Team Leader的開發證書。也就是說「My First Development Provisioning Profile」中綁定的開發證書是Team Leader簽名的。
在Properties面板(其實就是info.plist中的內容),根據你的App ID設置你的Bundle Identifier。若是你的App ID是A1B2C3D4E5.com.domainname.applicationname( 咱們在前面建立的App ID),那麼Bundle Identifier能夠是 com.domainname.applicationname 。若是App ID使用了通配符,好比A1B2C3D4E5.com.domainname.* ,則Bundle Identifier能夠是com.domainname.<任意字符>。
點擊項目窗口左上角的下拉框,選擇「 Device | Debug 」,而後點擊「Build and Debug」按鈕,編譯並在真機上運行程序。
八、發佈應用程序
發佈應用程序須要使用發佈證書(Distribution Certificate)。發佈證書的製做,跟製做開發者證書的步驟是同樣的,只不過使用的是Provision Portal的「Certificates->Distribution」功能。
把製做號的發佈證書下載、安裝到本機。
可是發佈用的Provision Profile稍有不一樣。 企業版IDP只有兩種發佈方式:In House和Ad Hoc。兩種Profile製做步驟稍有區別。 用In House方式發佈是企業版IDP真正區別於其餘版本的IDP所在。咱們重點介紹In House方式的發佈。
8.1 製做In House 方式的Destribution Provision Profile
以Team Admin登陸Provision Portal,打開「Provisioning Distribution」頁面。
Distribution Method:發佈方式,選擇In House。
Profile Name:Profile名稱,用於區別多個Profile。
Distribution Certificate:選擇要在Profile中綁定的發佈證書。
App ID:指定一個已有的AppID。
Devices(optional):要綁定的device ID。因爲In House方式能夠在任何Apple 設備上發佈,因此不須要設定Devices,這一項爲空。
點擊「Submit」,生成Profile。將Profile下載到本地進行安裝。方法:把Profile文件拖拽到Dock上的Xcode圖標。
8.2 製做Ad Hoc方式的Distribution Provision Profile
以Admin或Agent登陸Provision Portal。 打開「Provisioning Distribution」頁面。
與In House方式大同小異,只不過發佈方式選擇Ad Hoc,同在Devices(optional)欄勾選要綁定的device ID,最多可選擇100個。
點擊「Submit」,生成Profile。將Profile下載到本地進行安裝。
8.3 編譯In House發佈版本
打開你的工程。在工程的info窗口的Configuration面板,從Configuration列表中選擇Release,點擊「Duplicate」按鈕,將複製出來的Configuration更名爲Distribution。
打開Target的Info窗口,在Build面板,將Configuration修改成Distribution:
點擊「Any iOS Device」,在彈出菜單中選擇對應Profile下對應的發佈證書,這個Profile應該就是前面6.1中製做並安裝的In House 方式製做的Distribution Provision Profile(還記得Profile Name嗎?):
切換到Properties面板,在Identifier欄輸入Bundle Identifier。該Bundle Identifier應根據App ID填寫。
在工程窗口,選擇當前配置爲Distribution:
點擊「File->New File」菜單,而後選擇「Code Signing->Entitlements」:
打開Entitlements.plist,反選「get-task-allow」,保存。 該選項容許其餘進程(好比調試器)附加到你的程序,固然,在發佈階段,這個選項應當設置爲false。
注意,根據Apple的文檔,iOS 4.0/Xcode3.2.3以後建立的Entitlements文件再也不包括get-task-allow選項——默認狀況下,若是Entitlements中沒有get-task-allow選項,則不容許附加進程(即沒法調試)。
在調試配置下運行時,你不須要Entitlements文件,所以是容許附加進程的(能夠進行調試)。可是有時候,你已經有了一個Entitlements文件(好比你已經運行過Distribution配置),若是你再次運行Debug配置,則程序沒法啓動,由於get-task-allow默認爲false(iOS 4.0及Xcode3.2.3之後)。這種狀況下,請手動添加一個boolean類型的get-task-allow鍵,並設置爲false。
再次打開Target的Build設置面板。在「Code Signing Entitlements」中,輸入Entitlements.plist的文件名。
點擊「Build」編譯。注意:你須要準備一個57*57像素的圖標,iPhone和iPod會在主屏上顯示該圖標。
選中工程文件夾Products下面的.app文件,而後點擊Action下拉菜單中的Reveal in Finder。
8.4 製做安裝包
iPhone應用程序的安裝文件主要有兩種:.ipa格式和.app格式。前者是以.ipa爲後綴名的文件(已經包含了ProvisionProfile文件),後者實際是以.app爲後綴的文件夾(不包含ProvisionProfile文件)。所以,前者能夠直接發佈給用戶進行安裝,然後者須要和ProvisionProfile文件打包在一塊兒進行發佈。
8.4.1 製做ipa包
當把.app文件安裝到iTunes的資料庫以後,應用程序就是以.ipa的方式存在了。在「資料庫->應用程序」中選中這個應用程序圖標,右鍵,選擇「在Finder中顯示」,而後就能夠在Finder中把這個.ipa文件拷貝出來了。.ipa文件便可用後面的方法進行安裝。
8.4.2 製做rar/zip包
把編譯後的.app文件和ProvisionProfile文件一塊兒壓縮爲rar/zip文件,便可發送給其餘人進行安裝,或者發佈到網絡上以供下載。注意,不要使用Mac自帶的歸檔工具。由於windows使用ANSI編碼而Mac使用Unicode編碼,兩者互不兼容,這樣使用歸檔工具壓縮出來的rar/zip包沒法在windows下解開。你可使用開源的壓縮工具keka:
http://www.kekaosx.com/release/Keka-0.1.4.2.dmg
keka能製做在windows下兼容的壓縮包。解壓縮後的文件可用後面介紹的2種方法之一進行安裝。若是一種方法不能安裝,可換用另外一種方法。
8.5 安裝應用程序
Ad Hoc或In House發佈的應用程序,能夠將.app與Provision Profile文件打包在一塊兒發送給用戶。用戶能夠用兩種方式安裝:使用iTunes,或者使用iPhone配置使用工具。
8.5.1 使用iTunes
用戶將壓縮包中的.app和Provision Profile文件拖到iTunes的「資料庫->應用程序」下,而後和iPhone/iPod進行同步。
8.5.2 使用iPhone配置實用工具
iPhone配置工具是徹底免費的,你能夠從這裏下載:
http://support.apple.com/kb/DL926?viewlocale=zh_CN
安裝後會在「應用程序/實用工具」中生成一個快捷方式「iPhone配置實用工具」。
一樣,將iPhone/iPod連上電腦,打開「iPhone配置實用工具」,將.app和Provision Profile文件拖放到「iPhone配置實用工具」的「資料庫->應用程序」下,而後選中你的iPhone/iPod,在右邊「安裝或刪除應用程序列表」中,點擊某個應用程序右邊的「安裝」按鈕進行安裝。
九、問題及錯誤
若是Xcode出現Code sign錯誤:
Code Sign Errors: profile doesn’t match any valid certificate/private key pair in the default keychain
同時在Organizer中出現下列提示:
A valid signing identity matching this profile could not be found in your keychain
則須要把鑰匙串中的全部證書和密鑰刪除,而後從新請求證書、修復provision profile、下載並安裝,通常能夠獲得解決。