解析Mac Crash Log - ips file

在開發Mac App 遇到Crash 時,測試人員只會從Mac Crash Report中撈取ips檔案提供分析.

但ips檔案中只有source code位址,因而無法正確知道是在那一行Crash.

此時我們可以借助XCode中的package來解析文件

CoreSymbolicationDT路徑
1
Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources

將ips檔案和dSYM檔複製此路徑中,並打開終端機

輸入指令

Terminal
1
python3 CrashSymbolicator.py -d XXX.app.dSYM -o /Users/nick/XXXApp.crash -p XXX.ips

解析後打開XXXApp.crash,再根據ips Crash的位址即可得知是那一行Crash.


呼叫Mac系統設定頁面

在程式中有時候需要呼叫系統的設定頁面,在MAC OS 13以前可以從/System/Library/PreferencePanes/中找到相對應的設定頁面.


PushSharp & Http2

最近由於Apple Push Service憑證過期,重新申請憑證時,發現Apple Push Notification(簡稱APN)失效了。

於是在Apple Store下載一些APNs 測試App來測試推播,都無法接收到訊息。
後來在網路上找到一個C#測試工具-PushSharp GitHub,卻發現之前的憑證都可以正常執行。

但是使用後來申請的憑證,程式都執行不下去,且都沒接收到APN Server所傳來的Response。


Escaping 跳脫符號

範例中,使用兩層的closure,將closure作為callback function,當完成事件時,需要透過callback function將執行結果傳遞至畫面上呈現.

使用時遇到了以下的錯誤訊息.
“Escaping closure captures non-escaping parmeter”


Alamofire SessionDeinitialized & TLS Trust

在使用Alamofire library進行Https連接時,遇到了default TLS Trust evaluation failed 這個錯誤.

基本上看起來是無法取得憑證所導致的錯誤,但網站端所請求的並不是合法的憑證.

因此我們必須先透過ServerTrustManager來繞過憑證的驗證.


Can't find type xxx in scope

在程式中,常常會愈遇到 Can’t find type ‘XXX’ in scope 的錯誤,發生原因通常是

  • 拼字錯誤或大小寫不一致
  • 型態宣告不對
  • 未加入complie source中


Error Type '()' cannot conform to 'View'

在佈局畫面時,遇到

Type ‘()’ cannot conform to ‘View’; only struct/enum/class types can conform to protocols

的錯誤訊息.


SwiftUI 物件階層

設計App時,除了空件的位置之外,階層也是很重要的一環,它將決定A元件覆蓋B元件,還是被B元件所覆蓋.

在SwiftUI中主要有ZStack, Overlay 和 Background三種技術可以調整階層.


SwiftUI 背景如何渲染於Status Bar底下

在 WWDC 2019 大會上,Apple 發佈了全新的框架SwiftUI,讓你用更少的程式碼來設計及開發iOS App.

以往Swift的底層依舊是Object C,而SwiftUI已將底層全面換成Swift語法.

Swift: UIKit通常需要搭配storyboards一起使用,而SwitfUI完全使用程式碼來建構,並且可搭配Automatic Preview來即時預覽畫面.

設計App時,通常會設定自己的背景圖片,接下來我們來看如何設定


iOS 輸入框-提示文字

在 iOS 6+ 以上,針對輸入框提供了attributedPlaceholder來設置提示文字的顏色.