下載安裝好xcode5后,我們就可以開始ios開發(fā)之旅了。首先打開xcode。選擇新建一個xcode項目。
開封網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
新建一個單窗體的程序。
只需要簡單的設(shè)置一下項目的名稱,開發(fā)程序使用的設(shè)備,可以看到有ipad iphone等。
創(chuàng)建好項目后,可以看到xcode給我們自動生成了目錄結(jié)構(gòu)和簡單的配置文件。
先不做什么修改,來運行一下這個項目程序。點擊xcode左上角的運行按鈕。可以看到現(xiàn)在只是一個空白的程序,編譯運行后自動會調(diào)出ios模擬器?,F(xiàn)在在程序界面當中加一個label標簽來顯示helloworld。選擇項目目錄下面Main.stroyboard,鼠標單擊后,可以看到屏幕中間出現(xiàn)了一個空白的界面,這就是運行程序時的主界面?,F(xiàn)在從xcode右側(cè)的工具欄中拖一個label標簽到界面中央。現(xiàn)在就可以修改label的文字,比如改稱hello world!在點擊運行,看看運行后的效果吧,
iOS腳本自動化打包方案--xcodebuild
本文主要xcodebuild腳本自動化打包并上傳到蒲公英或者AppStore,廢話不多說,直接上干貨!
先了解一下xcodebuild打包需要的一些指令
-workspace XXX.xcworkspace
XXX.xcworkspace需要編譯工程的工作空間名稱,如果工程不是.xcworkspace的,可以不需要-workspace XXX.xcworkspace這段話
-scheme XXX
XXX是工程名稱,-scheme XXX是指定構(gòu)建工程的名稱
-configuration Release
填入打包的方式是Debug或Release,就跟在Xcode中編譯前需要在Edit scheme的Build configuration中選擇打出來的包是Debug還是Release包一樣,-configuration就是配置編譯的Build configuration
-archivePath ./myArchivePath
配置生成.xcarchive的路徑, ./表示生成在當前目錄下,myArchivePath是生成的.Archive文件名稱
ODE_SIGN_IDENTITY=證書
配置打包的指定證書,如果該工程的Xcode已經(jīng)配置好了證書,那么不加入這段話也可以,打包出來的證書就是Xcode中配置好的。
PROVISIONING_PROFILE=描述文件UUID
配置打包的描述文件,同上,Xcode已經(jīng)配置好了就不用在填入這段話了
CONFIGURATION_BUILD_DIR
配置編譯文件的輸出路徑,如果需要用到.xcarchive文件內(nèi)部的dSYM等文件,可以使用改字段指定輸出路徑。
如果工程是勾選了Automatically manage signing,那么就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE,今天這里講到的Automatically manage signing自動配置證書,手動配置的就不多說了,有興趣的話可以自己研究。
xcode工程配置自動獲取證書,如下圖:
打包所需要文件
配置打包的ExportOptions.plist文件,可以在任意一個Xcode工程中新建一個ExportOptions.plist文件。dev和adHoc和AppStore的配置文件內(nèi)容不一樣,可以先手動打包后看下plist文件的樣式,這里提供一個樣例:
這里method對應(yīng)的value為打包對應(yīng)的環(huán)境,有development、ad-hoc、app-store、enterprise根據(jù)打包環(huán)境來配置不同的值
編譯腳本命令
xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID
導出ipa包命令
xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out
-archivePath ./myArchivePath.xcarchive指定需要打包的.xcarchive路徑,./myArchivePath.xcarchive表示在當前終端路徑下的myArchivePath.xcarchive文件
-exportOptionsPlist ./ExportOptions.plist指定打包需要的ExportOptions.plist配置文件路徑
-exportPath ./out指定打包輸出的路徑, ./out表示打包結(jié)果輸出在終端的當前路徑下的out文件家中。如果沒有out文件夾會自動創(chuàng)建一個
腳本操作
首先:cd到需要自動打包的工程下
然后:在終端中輸入touch xcodebuild.sh創(chuàng)建xcodebuild.sh腳本文件
然后:雙擊打開腳本寫入下面 腳本內(nèi)容(請確保所有版本的plist配置文件都寫好了)
最后:在終端中輸入./xcodebuild.sh運行腳本,按照步驟完成打包選擇(如果運行的時候出現(xiàn)Permission denied,請先在終端中執(zhí)行chmod a+x *.文件的后綴名后,在運行,相當于提高腳本文件的權(quán)限)
腳本內(nèi)容
此腳本包含了自動上傳蒲公英的選擇操作,根據(jù)輸入指令來執(zhí)行具體操作
腳本實現(xiàn)
具體詳細腳本見GitHub地址: 如果好用記得給star,謝謝!
如腳本打包執(zhí)行遇到問題可留言溝通!
pod登錄庫里報出的錯誤,因為把警告當成了錯誤
解決方案: build Setting 里的 Treat Warnings as Errors 改成 NO
解決方案:在 Build Setting 里的 Framework Search Paths 下添加 $(inherited) 配置項
解決方案:在對應(yīng)的報錯文件里,如 "PMUISKeletonAdapter" 項目的 Build Phases-Headers-Public 里添加對應(yīng)報錯的文件
解決方案:刪除緩存, DerivedData 里緩存文件清空或者clear
組件互相持有導致
解決方案: podfile 里刪除一個持有關(guān)系?;蛘卟煌瑫r引用這兩個組件,只引用其中一個。
找不到庫導致(前提是項目里能搜索到)
解決方案:在Other Linker Flags里添加對應(yīng)的庫
找不到MPGroupService庫里的MPMXXX文件里的CPMGroupMgr類
解決方案:添加對應(yīng)的類文件或者相關(guān)的pod庫。
OBJC_METACLASS意思是報錯類重復,OBJC_IVAR是指定屬性重復
解決方案:刪除其中一個,如果是pod庫可以找找有沒有刪除相同的引用文件,能解決沖突的pod版本,如果沒有只能刪除其中一個pod庫。
驗證 :我們創(chuàng)建一個 UILalble ,我們在 沒有 設(shè)置字體大小時候,用控制臺 Log 打印字體大小,驗證默認字體是否 17 ?。結(jié)果圖如下:
每個iOS開發(fā)者都是被折翼過翅膀的天使,都曾被證書配置折磨的痛苦不止,好不容易學會了手動管理證書,結(jié)果蘋果霸霸來了一個Automatically manage signing,又會陷入一圈的懵逼中,還真是不讓我們輕松,下面跟著我來將“充滿霧霾”的身心放空,不埋怨,不抱怨,畢竟蘋果霸霸也是好意嘛!接下來,讓這篇文章帶你理解自動配置證書如輕拂過額頭的一縷清風一般,吹過就驅(qū)散了你心中的“霧霾”。
到此,我想你已經(jīng)能夠理解Xcode自動管理證書的過程了,如果還不夠理解,建議 靜下心 來再看一遍保證其意自現(xiàn)!
1:自動管理證書的原則是根據(jù)你創(chuàng)建的APP ID來匹配證書和配置文件,也可以理解成根據(jù)你的Bundle ID來匹配,比較手動管理還是方便很多,同時也不易出錯,理解證書的管理過程讓你在配置的時候輕松一笑面對,不再打錯配置文件的包,不再混淆證書配置之間的關(guān)系,這點還是非常重要的,你要理解證書配置的來龍去脈,而不是每次配置好后自己仍不知所以然,雖然成功了,但是難免出錯。
2:如果你發(fā)現(xiàn)Xcode自動配置的APP ID不是你想要的配置文件時候,因為你一個APP ID可以對應(yīng)多個配置文件,所以它雖然APP ID是對的,配置文件不一定對,這個時候,你去文件夾刪除所有配置文件,然后再配置就可以了!
我是Qinz,希望我的文章對你有幫助。
當安裝多個xcode的版本,使用該工具使用指定的版本。
-p 或者 --print-path 查看當前開發(fā)者目錄,也即是xcode的版本目錄。print the path of the active developer directory
-s path 或 --switch path 選擇xcode的版本
--install 安裝
--version 查看版本
--reset 恢復默認
sudo rm -rf /Library/Developer/CommandLineTools 強制刪除安裝目錄下的文件
是管理Fat File的工具, 可以查看cpu架構(gòu), 提取特定架構(gòu),整合和拆分庫文件。
Mac OS X下二進制可執(zhí)行文件的動態(tài)鏈接庫是dylib文件。所謂dylib,就是bsd風格的動態(tài)庫?;究梢哉J為等價于windows的dll和linux的so。mac基于bsd,所以也使用的是dylib。
Linux下用 ldd 查看,蘋果系統(tǒng)用 otool 。
otool命令介紹
MobSF
Mach-O 文件格式解析
xcodebuild :通過工程文件,生成app文件。
xcrun :通過app文件,來生成ipa文件(包含了簽名的過程)。
通過app文件生成ipa文件
libtool是一個通用庫支持腳本(/usr/bin/libtool),將使用動態(tài)庫的復雜性隱藏在統(tǒng)一、可移植的接口中。
可以在不同平臺上創(chuàng)建并調(diào)用動態(tài)庫,我們可以認為libtool是gcc的一個抽象,也就是說,它包裝了gcc或者其他的任何編譯器,用戶無需知道細節(jié), 只要告訴libtool說我需要要編譯哪些庫即可,并且,它只與libtool文件打交道,例如lo、la為后綴的文件。
libtool工具的使用
庫是一單獨的文件,里面包含了按照特定的結(jié)構(gòu)組織起來的其它的一些文件(稱做此庫文件的member)。原始文件的內(nèi)容、模式、時間戳、屬主、組等屬性都保留在庫文件中。
詳細命令參見, 菜鳥網(wǎng)絡(luò)-ar命令
可以用來創(chuàng)建、修改庫,也可以從庫中提出單個模塊。
lipo libAFNetworking.a -thin arm64 -output lib-arm64.a 生成Arm64包
ar -t lib-arm64.a 輸出包含的.o文件 和 otool -L libAFNetworking.a 一樣。
ar -x lib-arm64.a 解壓出包里面的.o文件
在iOS開發(fā)中,常常用來分析二進制和靜態(tài)庫文件。
列出 .o .a .so 中的符號信息,包括諸如符號的值,符號類型及符號名稱等。所謂符號,通常指定義出的函數(shù),全局變量等等。
iOS開發(fā)中,可以用來查看.a靜態(tài)庫所有打包進去的.o文件和函數(shù)接口信息,幫助我們定位崩潰信息。
例如: nm -u libAFNetworking.a 列出某個.o文件的接口信息。
二進制查看命令,將文件顯示為16進制字符串表示形式。
例如: xxd libYTKNetwork.a | grep "net" 查看YTKNetwork.a文件里面包含net字符串的,幫助我們分析一些二進制文件。
DWARF文件初探——提取輕量符號表
Mac系統(tǒng)下lipo, ar, nm等工具的使用簡介
美團 iOS 工程 zsource 命令背后的那些事兒
Linux工具參考篇
iOS 靜態(tài)庫沖突 兩個不同的.o 文件沖突 ,靜態(tài)庫分離