一些特殊場景可能會要求使用鏈庫的方式使用第三方庫,大致設置以下:安全
①Other Linker Flags裏進行設置,格式爲-l+庫名稱架構
②Libray Search Paths裏設置庫的路徑地址,注意使用相對路徑app
③Header Search Paths設置相關頭文件的路徑工具
使用其餘部門提供的靜態庫出現相似Undefined symbols for architecture報錯時,頗有多是對方打包時相關設置沒有正確設置,這時能夠在命令行裏使用「lipo -info 靜態庫路徑」確認其所支持的架構信息。編碼
當以靜態庫形式出包給第三方使用,除了CI例如jenkins等自動編譯打包外,須要臨時手動快速出包時,進行以下兩步便可spa
①調整好編譯模式,例如設置爲release模式,分別設置target爲模擬器及真機,command+B編譯出兩個庫.net
②命令行中執行相關命令便可 「lipo -create 真機版靜態庫路徑xxxx 模擬器版靜態庫路徑xxxx -output 合併後靜態庫路徑」命令行
當提供一個靜態庫嵌入到其餘業務部門的工程,遇到一些問題必須在其工程裏進行調試時,若是僅靠輸出log的方式可能不夠實時,或者須要重複設置輸出log的地方並再次編譯出包,這時其實能夠將靜態庫工程和工程放在同一個workSpace下,將靜態庫最新編輯打包結果更新到主工程裏,同時在靜態庫相關目標位置打斷點便可,運行主工程,便可正常進入到相關斷點位置,並觀察相關變量信息。debug
使用第三方庫遇到問題,須要排查第三方庫相關問題而又不方便聯調時,可使用符號斷點的方式定位到相關方法進行觀察調試,若是知道對應類名將會更加精確,如圖所示3d
無論出於安全考慮仍是以前蘋果曾一度要求所有使用https,不少服務端已經將服務遷移使用https了,使用charles捕捉相關請求時也須要進行相應證書設置,不然沒法查看到相關信息
步驟以下:
①pc上先安裝相應根證書
②在真機上安裝相應根證書,注意須要鏈接到pc代理上再根據提示的地址安裝,若是使用該地址安裝有問題,能夠試試http://charlesproxy.com/getssl
雖然如今基本都會採用友盟、bugly之類第三方工具收集崩潰日誌,但總有些時候發生崩潰而第三方平臺沒有采集到相關數據,若是這時候有設備的崩潰日誌的話,只能使用Xcode自帶的symbolicatecrash手動解析定位下緣由了。
須要準備好的是真機導出的crash日誌、打包後文件,置於同一目錄下,準備進行符號化工做
打開命令行終端開始符號化:
①找到symbolicatecrash並拷貝到目錄下,注意使用的是iPhone對應的symbolicatecrash
find /Applications/Xcode.app -name symbolicatecrash -type f
cp symbolicatecrash的路徑 對應存放目錄路徑
②切換到指定目錄下進行符號化
對應命令:./symbolicatecrash crash文件路徑 dSYM文件路徑 > 符號化後的crash日誌路徑
若中間遇到not define的問題,單獨執行命令設置下便可,export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
判斷字符串包含的方法「containsString」是在iOS8及以上系統版本才支持,8如下系統例如iOS7上會找不到該方法致使崩潰。
解決辦法是能夠自行加個category擴展下
個別特殊場景可能致使重複移除監聽崩潰,能夠try catch避免重複移除時崩潰或者從根本上避免重複添加移除操做,參考iOS開發-黑科技防止屢次添加刪除KVO出現的問題
以前使用UIPasteboard臨時存放一些數據方便app之間共享數據,爲了不影響系統的複製粘貼信息pasteboardWithName:單首創建了粘貼板,可是iOS10某個小版本後確實如官方所說,這種方式被棄用了,再也不支持,表現爲經過app A在UIPasteboard設置的信息,在app B內讀取出來爲空了。
解決辦法是:使用系統默認的UIPasteboard,即[UIPasteboard generalPasteboard],或者官方推薦的App Groups方式進行app之間數據共享,不過這種方式是iOS8之後支持的,而且須要手動開啓這項功能設置,若是分享對象的app不方便設置的話會相對麻煩一些。
調試的時候,除了打斷點一步步跟蹤,有時想快速直接獲取到某一方法的調用者信息,是能夠經過方法實現的,具體參考 Print the name of the calling function to the debug log
狀態欄高度變化會影響view的frame,須要進行相應適配,固然新出的iPhone X例外,這個適配問題將不會存在,狀態欄高度發生變化有兩種場景:
①進入頁面時,狀態欄高度已經增高,這時候須要進行判斷其高度並作相應適配,這時狀態欄的高度應該是40
②瀏覽當前頁面時,狀態欄高度增高,這就須要頁面初始化時添加一個監聽狀態欄高度變化的通知,當起變化是作相應適配處理
①對於上報服務端信息之類場景,若有必要或保護特殊字符時,須要先進行編碼操做,避免亂碼
②使用URLWithString轉換字符串爲NSURL時,注意先對字符傳進行一次UTF-8編碼,不然字符串裏包含空格等狀況時直接URLWithString轉換結果返回nil
使用vImage實現,兼顧了模糊效果和執行耗時兩方面,參考vImage高斯模糊(Blur)
文字計數時須要將標點、符號、數字等只記爲0.5個字符,實際上就是這些ascii字符只記爲0.5個字
①消除warning,例如在部分片斷告訴編譯器禁用對應警告
②區分真機和模擬器,例若有些功能或SDK不支持模擬器,例如攝像頭相關的,爲了讓模擬器能編譯運行,可能須要區分下模擬器,跳過相關部分的編譯