[iOS] 加速送審App (Expedite App Review)
沒有bug就沒有工作,於是乎自然而然產生bug⋯⋯(笑~)
有時候以為完全沒問題,簡單測試完後送審並上架,結果不到三天,上千用戶陸續使用後,發現要結帳時居然crash⋯⋯為什麼我會知道crash呢?因為Firebase有Crashlytics。
原以為問題不大,然而在我家客服收到「無法結帳」的抱怨,始知事情大條啦⋯⋯
沒有bug就沒有工作,於是乎自然而然產生bug⋯⋯(笑~)
有時候以為完全沒問題,簡單測試完後送審並上架,結果不到三天,上千用戶陸續使用後,發現要結帳時居然crash⋯⋯為什麼我會知道crash呢?因為Firebase有Crashlytics。
原以為問題不大,然而在我家客服收到「無法結帳」的抱怨,始知事情大條啦⋯⋯
沒想到簡單的多國語言檔案,也能造成App邏輯出現問題呢⋯⋯
這次由於檔案中莫名多了個「看不見的字元」,編譯能過,但卻讓NSLocalizedString(key, comment)出現問題!原本傳key會回value,出了問題後傳key會依然回key⋯⋯
智慧手機近年來螢幕越大越有多人想使用,Apple一直是潮流先驅者,當然會緊跟著用戶的心意。2019年9月發布更大尺寸的iPhone,而我也在五年後,把iPhone 6換成iPhone 11。![[iOS] iPhone 螢幕尺寸.png](https://cg2010studio.com/wp-content/uploads/2020/04/ios-iphone-e89ea2e5b995e5b0bae5afb8.png?w=540)
之前我也寫過iOS Support Matrix,該圖表作者在2020年表示,因為Apple發佈累積的iPhone裝置太多,已經無法簡單地繪製圖表,於是捨棄較舊的裝置來重新製作~
iPhone X之後的狀態列變化較大,於是要判斷手機模型來決定預留多少高度,此無最佳解,只能與時俱進囉~
參考:The Ultimate Guide To iPhone Resolutions、iOS Design、Say Hello to the iPhone Specs Matrix
2020年3月開始,上傳ipa檔到App Store,立刻收到上傳成功信,不過有點不太一樣的是,信中提醒有個問題未來必須解決⋯⋯目前可以暫時略過,直到2020年12月後若還沒解決,上傳ipa檔到App Store就會被拒絕!
哇~真是驚為天人,原本已經完美無瑕的功能,現在要被迫更新使用新的API。其實軟體就是如此,會隨著時間演化出更好的效能,與時俱進是較佳的做法,就像公司的產品,若一直是舊有的狀態,極有可能會被時代給遺棄。例如:Feature phone已被Smart phone取代啦~
原本在想只要搜尋本專案中有無關鍵字「UIWebView」,然而查到的解法,是連同所使用的第三方套件都必須一併移除,這可是大工程呢!於是要研究怎麼轉移到「WKWebView」。
最近要一口氣地將所有產品做完支援Layout API的功能,我特別善用Git的Branch (分支)功能,也就是把每一個開發目標都開個Branch,單純只記錄一個開發目標的變更,如圖:
Source Tree真是個好工具,可以將Branch以不同的顏色表達!
當每個開發目標都完成增修後,就可以開始一步一步來Merge (合併),如圖:
儘管我是一個人在開發產品,然而我不馬乎地開Branch,就有機會碰到Conflict (衝突),此時可來練習如何排除此問題,之後再遇多人協同合作的開發模式,就不必手忙腳亂囉~
使用指令也相當簡單:
某天老闆心血來潮,要推播促銷活動,發現奇怪的問題⋯⋯查詢後原來是iOS 13 Apple推播通知回傳的Device Token改變了規則~
我立馬測試我們家App取得的Device Token,結果如下:
Printing description of deviceToken:
<a9df8591 f9be281b 45b7fd30 c452c298 05d04532 1c8e5e93 83079040 2efd1b83>
Printing description of deviceTokebStr:
{length=32,bytes=0xa9df8591f9be281b45b7fd30c452c298…830790402efd1b83}
Printing description of deviceToken:
<f144b48d 96957ab9 16717a2e e36d56a3 e91c0f7f 48623985 021173dd c4097c0e>
Printing description of deviceTokebStr:
f144b48d96957ab916717a2ee36d56a3e91c0f7f48623985021173ddc4097c0e
可以看到原本該是64字元的字串,變成有length和bytes,於是乎要再另外處理。
在iOS中有兩種常用的容器Object,就是Dictionary和Array,而現在資料傳輸到伺服器幾乎都在使用JSON,於是就有很多機會要將Object 轉換成 JSON。
註:
JSON(JavaScript Object Notation,JavaScript物件表示法,讀作/ˈdʒeɪsən/)是一種由道格拉斯·克羅克福特構想和設計、輕量級的資料交換語言,該語言以易於讓人閱讀的文字為基礎,用來傳輸由屬性值或者序列性的值組成的資料物件。儘管JSON是JavaScript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。
JSON 資料格式與語言無關,脫胎自JavaScript,但目前很多程式語言都支援 JSON 格式資料的生成和解析。JSON 的官方 MIME 類型是 application/json,副檔名是 .json。
為了避免上架時把開發的東西誤上傳,那麼一開始最好就定義好Debug和Release,其實Debug和Release在Xcode中已有定義,包版本釋出預設就是Release,而開發的時候透過Xcode編譯到手機,預設則是Debug,不過其實可以改成Release來測試,如此方便!
透過Xcode可以讓專案自定義變數 (Project User Defined Variable),這樣一來就算忘了有什麼是測試還是正式,都不用擔心會上錯啦~
HappyMan・迴響