iOS開發筆記18:一些編譯、開發調試、打包的細節整理,ios18

來源:互聯網
上載者:User

iOS開發筆記18:一些編譯、開發調試、打包的細節整理,ios18
     1.以鏈庫的方式引用第三方庫

       一些特殊情境可能會要求使用鏈庫的方式使用第三方庫,大體設定如下:

      ①Other Linker Flags裡進行設定,格式為-l+庫名稱

       

      ②Libray Search Paths裡設定庫的路徑地址,注意使用相對路徑

       

     ③Header Search Paths設定相關標頭檔的路徑

        

     2.檢測靜態庫支援架構以及靜態庫打包

      使用其他部門提供的靜態庫出現類似Undefined symbols for architecture報錯時,很有可能是對方打包時相關設定沒有正確設定,這時可以在命令列裡使用“lipo -info  靜態庫路徑”確認其所支援的架構資訊。

      當以靜態庫形式出包給第三方使用,除了CI例如jenkins等自動編譯打包外,需要臨時手動快速出包時,進行如下兩步即可

      ①調整好編譯模式,例如設定為release模式,分別設定target為模擬器及真機,command+B編譯出兩個庫

      ②命令列中執行相關命令即可 “lipo -create  真機版靜態庫路徑xxxx  模擬器版靜態庫路徑xxxx  -output   合并後靜態庫路徑”

     3.靜態庫聯調問題

      當提供一個靜態庫嵌入到其他業務部門的工程,遇到一些問題必須在其工程裡進行調試時,如果僅靠輸出log的方式可能不夠即時,或者需要重複設定輸出log的地方並再次編譯出包,這時其實可以將靜態庫工程和工程放在同一個workSpace下,將靜態庫最新編輯打包結果更新到主工程裡,同時在靜態庫相關目標位置打斷點即可,運行主工程,即可正常進入到相關斷點位置,並觀察相關變數資訊。

     4.使用符合斷點定位調試其他第三方庫的問題

      使用第三方庫遇到問題,需要排查第三方庫相關問題而又不方便聯調時,可以使用符合斷點的方式定位到相關方法進行觀察調試,如果知道對應類名將會更加精確,

     5.charles捕捉https請求

      不管出於安全考慮還是之前蘋果曾一度要求全部使用https,很多服務端已經將服務遷移使用https了,使用charles捕捉相關請求時也需要進行相應認證設定,否則無法查看到相關資訊

      步驟如下:

      ①pc上先安裝相應根憑證

      

      ②在真機上安裝相應根憑證,注意需要串連到pc代理上再根據提示的地址安裝,如果使用該地址安裝有問題,可以試試http://charlesproxy.com/getssl

       

       

     6.符號化crash日誌定位原因

      雖然現在基本都會採用友盟、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" 

        

     7.注意containsString是iOS8以後才支援,iOS7上需要自行擴充

        判斷字串包含的方法“containsString”是在iOS8及以上系統版本才支援,8以下系統例如iOS7上會找不到該方法導致崩潰。

        解決辦法是可以自行加個category擴充下     

        

     8.避免重複移除kvo監聽導致崩潰

        個別特殊情境可能導致重複移除監聽崩潰,可以try catch避免重複移除時崩潰或者從根本上避免重複添加移除操作,參考iOS開發-黑科技防止多次添加刪除KVO出現的問題    

     9.在iOS10及以上版本使用UIPasteboard在app之間共用資料的問題

         之前使用UIPasteboard臨時存放一些資料方便app之間共用資料,為了避免影響系統的複製粘貼資訊pasteboardWithName:單獨建立了粘貼板,但是iOS10某個小版本後確實如官方所說,這種方式被棄用了,不再支援,表現為通過app A在UIPasteboard設定的資訊,在app B內讀取出來為空白了。

解決辦法是:使用系統預設的UIPasteboard,即[UIPasteboard generalPasteboard],或者官方推薦的App Groups方式進行app之間資料共用,不過這種方式是iOS8以後支援的,並且需要手動開啟這項功能設定,如果分享對象的app不方便設定的話會相對麻煩一些。

     10.列印方法調用者資訊

        調試的時候,除了打斷點一步步跟蹤,有時想快速直接擷取到某一方法的調用者資訊,是可以通過方法實現的,具體參考 Print the name of the calling function to the debug log

     11.狀態列適配-熱點、多媒體佔用、定位等導致狀態列高度變化

        狀態列高度變化會影響view的frame,需要進行相應適配,當然新出的iPhone X例外,這個適配問題將不會存在,狀態列高度發生變化有兩種情境:

        ①進入頁面時,狀態列高度已經增高,這時候需要進行判斷其高度並做相應適配,這時狀態列的高度應該是40

        ②瀏覽當前頁面時,狀態列高度增高,這就需要頁面初始化時添加一個監聽狀態列高度變化的通知,當起變化是做相應適配處理

     12.字串處理的一些細節

       ①對於上報服務端資訊之類情境,如有必要或保護特殊字元時,需要先進行編碼操作,避免亂碼

       ②使用URLWithString轉換字串為NSURL時,注意先對字元傳進行一次UTF-8編碼,否則字串裡包含空格等情況時直接URLWithString轉換結果返回nil

     13.不使用第三方庫,一個相對性價比高的高斯模糊的方法

      使用vImage實現,兼顧了模糊效果和執行耗時兩方面,參考vImage高斯模糊(Blur)

     14.使用類似微博的字元計數規則

      文字計數時需要將標點、符號、數字等只記為0.5個字元,實際上就是這些ascii字元只記為0.5個字

     15.一些宏的使用

      ①消除warning,例如在部分區段告訴編譯器禁用對應警告

     ②區分真機和模擬器,例如有些功能或SDK不支援模擬器,例如網路攝影機相關的,為了讓模擬器能編譯運行,可能需要區分下模擬器,跳過相關部分的編譯

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.