基於Lexrus的博文iOS-makefile,本文對自動打包涉及到的操作步驟以及理論基礎進行了適當的補充。
請在閱讀本文前先閱讀《iOS makefile》。文章地址:http://lextang.com/ios-makefile。
首先我們從github下載iOS makefile源文件,源文件包含2個文件:makefile腳本文件和makefile.cfg腳本配置文件。makefile.cfg主要用來填寫待打包項目的有關信息,包括項目名、workspace、configuration、Scheme。Xcode默認的configuration包括Debug和Release。你可以在project文件的Info->configuration標簽下對設置一個InHouse或AdHoc的config。makefile腳本在當前目錄會搜索.cfg文件並導入,所以在運行打包命令前,需要確保這兩個文件是在同一個目錄內。
iOS makefile的當前版本暫只支持workspace,所以沒有使用workspace的項目打包就會報錯。如果你的project並沒有使用workspace進行組織,那么你可以在Xcode中將當前project另存為workspace以創建workspace文檔。你可以通過選擇Xcode的File->Save As Workspace,然后將workspace文檔保存到項目根目錄下;你也可以單獨創建一個workspace文檔,然后在Project Navigator中右擊,選擇add file to "yourWorkspace",選擇你需要添加的擴展名為.xcodeproj的project文件后,project就被加入到你的新workspace中了。
workspace是xcode 4.0引入的新特性,表面上它就是一個Xcode文檔,文檔指向當前workspace包含的project和其他的文件,但不包括數據。workspace和project之間是多對多的擁有關系。一個workspace可以包含多個項目,一個項目可以被多個workspace包含。如果在workspace中的一個A project擁有一個靜態庫,該靜態庫被當前同在workspace中B project鏈接引用。那么Xcode將在構建B project之前自動構建該靜態庫。即使B project的構建配置沒有對鏈接庫做顯式的依賴。在Java中一個完整的構件過程包括:生成代碼(相當於iOS中使用了ARC,會自動插入retain/release代碼)、編譯源文件、編譯測試源文件、執行測試(單元測試,集成測試)、打包(生成jar,war,ejb-jar,ear)、運行健康檢查(靜態分析器,如Checkstyle,Findbugs,FMD,測試覆蓋率,等等)、生成報告。(iOS的構建階段包括:編譯源文件、鏈接二進制文件和庫(二進制文件是指那些已經被編譯好的框架代碼)、拷貝束資源。)使用workspace的另一個好處是如果多個項目使用同一個庫,使用workspace不需要為每個項目都拷貝一份靜態庫文件(基於安全考慮,蘋果不允許使用動態庫,使用動態庫apple store會拒絕你應用的上架申請。動態庫猶似一個潘多拉盒,它可以在運行時被加載與卸載,你可以下載新的代碼並執行。對於開發in-house的應用,技術上是可行的,事實上是蘋果不允許apple store上架應用使用動態鏈接庫,而操作系統一定是支持動態鏈接庫的,越獄app就是利用的操作系統上的支持技術)。
那么靜態庫、動態庫、框架三者之間有什么區別呢,靜態庫是一個代碼單元,它在編譯時被鏈接,且不可以發生改變。iOS靜態庫只能是代碼,不可以是媒體資源,你可以使用media bundle添加媒體資源。動態庫可以是代碼單元或資源單元,它在運行時被鏈接,可以發生改變。只有蘋果公司可以為iOS創建動態庫。框架是一個已經編譯好的代碼集合,所以無法看到源代碼,而靜態庫是可以看到所有的源代碼。框架可分為靜態框架和動態框架。你可以使用很多方法創建自己的靜態框架,靜態庫構件工具:https://github.com/jverkoey/iOS-Framework。
iOS makefile腳本發送郵件功能使用的是第三方郵件服務Mailgun,使用Mailgun提供的API接口可以以編程的方式控制發送郵件的發送、接收、轉發、郵件追蹤。為了配置Mailgun的郵件列表和郵件域名。我們需要創建一個郵件域名和郵件列表,郵件域名可以選擇自己的域名或者使用Mailgun的二級域名。郵件列表就是一個收件人郵件地址集合。我們將需要接收打包結果的郵箱錄入郵件列表中。自動打包腳本不是將Mailgun的api key直接以明文的方式寫在腳本中,而是讀取keychain訪問郵件的api key。所以在發送郵件之前,我們需要將得到的Maingun的Api key存入keychain中。打開keychain access,在分類下選擇密碼,點擊底部的+號,注意keychain Item Name要和腳本配置文件要求的要一致,否則腳本訪問不到密碼,密碼使用Mailgun的api key。配置界面如下圖所示:

keyChain中配置API Key
.cfg配置實例參考
如下圖所示,打包成功之后,可以選擇iMessage或email的方式做OTA分發給測試人員,測試人員可以點擊鏈接下載或掃描二維碼進行安裝,非常的方便。
發送iMessage消息進行安裝

用我查查掃描郵件中二維碼進行安裝 前往選擇安裝
