[iOS] 取得行事曆的事件 (Get Event From Calendar)
由於想要提早推播通知朋友生日,我必須取得取得行事曆的事件 (Get Event From Calendar)。
實際上我想知道資料回傳格式,如此能讓設計師規劃介面。
老實說,我沒在用內建的行事曆App,行事曆中的生日資料,是老早之前登入臉書帳號後,系統擷取回來加入。
由於想要提早推播通知朋友生日,我必須取得取得行事曆的事件 (Get Event From Calendar)。
實際上我想知道資料回傳格式,如此能讓設計師規劃介面。
老實說,我沒在用內建的行事曆App,行事曆中的生日資料,是老早之前登入臉書帳號後,系統擷取回來加入。
先前已記錄:棄用API的使用情況 (Deprecated API Usage),也先行移除專案自己寫的UIWebView,現在要進行移除第三方套件中的UIWebView!
想要移除第三方套件中的UIWebView其實不難,只要套件作者願意移除,然後使用套件的開發者更新版本,就能順利完成!若該套件是非常被廣泛使用,其他開發者肯定會很早就提醒套件作者。像是AFNetWorking和Admob。
不是說2020年12月上傳ipa才會擋?原來今年第一次上傳ipa的App,直接被迫要使用WKWebView,不然連送審都不行哪~
Dear Developer,
We identified one or more issues with a recent delivery for your app, “油價管家" 1.0.1 (1). Please correct the following issues, then upload again.
ITMS-90809: Deprecated API Usage – New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).
Best regards,
The App Store Team
沒有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。
HappyMan・迴響