Posts Tagged With: iOS

[iOS] 更新到 macOS 10.14 開不了機


話說昨天我 NB 更新 Win10 1903 ,看到旁邊的 MacBook Pro 閒閒的,想到半年沒開機,就打開來讓他自動更新。

先更新了一堆 App ,macOS 10.13.x 更新了 3 個版本,並多次自動重新開機。

更新完後,在 AppStore 上顯示 XCode 最新版要安裝 macOS 10.14 ,就從 AppStore 順手更新到 10.14 。

都在更新 OS ,我是更新小王子呢…

更新完 10.14 ,然後自動重開機就變成下面照片那樣關機或重試一直循環。
錯誤訊息為:

無法開機的錯誤畫面

A critical software update is required for your Mac, but an error was encountered while installing this update.
Your Mac can’t be used until this update is installed.

試過 Try Again 不成功,又試了 Shut Down 後開機,仍然是這個畫面。

把錯誤訊息丟到 Google 搜尋看看,倒是有不少人碰到。

這個影片是重試幾遍就正常了:

A critical software update is required for your Mac – Problem Apple Powerbook Pro

這兩個網址是說可能要重裝:

A Critical Software Update Is Required for Your Mac, but an Error Was Encountered While Installing This Update

How to fix the critical software update problem on Macs

想說等今天空下來再處理,下午忙完後,打開 MacBook Pro 電源,過了 5 分鐘想起來,轉頭看向 MacBook Pro …

居然自己好了…

正常開機到新版

我在懷疑可能是昨天連續更新約 15 GB 後過熱造成機器不正常,所以放冷到今天開機後就正常了… 來繼續更新 XCode 6.1 GB 吧~

廣告
Categories: 工作點滴, 更新與回報 | 標籤: | 發表留言

[iOS] 環境升級後,無法正常編譯 App


話說七月底完成 iOS 程式後,我就沒開過 MacBook Pro 。

老闆忽然嫌棄起 App 在 iPhone 上的顏色,所以由形象設計師不斷改版,直到老闆終於 OK 選定 Icon 後,昨天我把 MacBook Pro 打開。

太久沒開機了,昨天就是一直更新,XCode 從 11.x 更新到 12.0 ,再更新到 12.1。

今天早上開 Visual Studio for Mac 也觸發更新,等到更新完都快中午了。

把新的 Icon 置換進去,變更版號後,重新編譯居然發生錯誤。我一開始以為是我操作有問題,直到後來編譯沒改過的測試專案後也發現相同的問題。

主要錯誤是 ibtoold 引起,錯誤訊息為:

unrecognized selector sent to class

unrecognized selector sent to class

unrecognized selector sent to class

開了多個專案都在畫面出錯 (.storyboard) ,可能是啟動畫面或主畫面,似乎都是軟體啟動的第一個畫面。

眾裡尋她千百遍,終於找到,是 XCode 尚未更新完造成。當然不是的話可以試試 google 找到的其他方案。

先把 Visual Studio for Mac 關閉。

打開 XCode ,可以看到,雖然 App Store 那邊說更新完畢了,但是實際上尚未更新:

XCodeUpdate_02

完成 XCode 更新

按下 [Install] 讓它跑一下:

XCodeUpdate_03

更新 XCode 中

更新完成後版本為 10.1 。

XCodeUpdate_04

完成 XCode 更新

再開啟 Visual Studio for Mac 重新編譯就正常通過了。

 

 

Categories: 工作點滴, 技術分享 | 標籤: | 1 則迴響

[H5] 偵測不同裝置的解析度


在 DHTML4 的年代,我常常用 VML 來處理未知螢幕解析度的縮放,到了 HTML5 的年代,當然就是改用 SVG 。

使用 SVG 處理縮放通常希望開啟網頁時,能自動縮放到最佳解析度,Windows 下還好除錯,行動裝置就很麻煩了。

Windows 裝置 IE/Edge 支援縮放,Chrome 則不支援。

原先寫的程式碼多半參考網路上的,各有出處,說法也不同,所以就發生 Android 正常時,iOS 就不正常,iOS 正常時,Android 就不正常。

所以乾脆用個除錯網頁分別讓不同瀏覽器去跑,下表是三個裝置 javascript 抓到的值,其中 IE11 的螢幕解析度 1920×1080 ,螢幕字型 125% (120 DPI) 。

IE11 Android 8.0 iOS 11.4
window.innerWidth 1536 1440 980
window.innerHeight 807 2240 1472
window.outerWidth 1550 360 0
window.outerHeight 878 560 0
window.screenX -7 0 0
window.screenY -7 0 0
window.scrollX undefined 0 0
window.scrollY undefined 0 0
window.pageXOffset 0 0 0
window.pageYOffset 0 0 0
window.devicePixelRatio 1.25 3 3
window.screen.width 1536 360 414
window.screen.height 864 640 736
window.screen.availWidth 1536 360 414
window.screen.availHeight 864 640 736
window.screen.deviceXDPI 120 undefined undefined
window.screen.deviceYDPI 120 undefined undefined
window.screen.logicalXDPI 96 undefined undefined
window.screen.logicalYDPI 96 undefined undefined
window.screen.systemXDPI 120 undefined undefined
window.screen.systemYDPI 120 undefined undefined
window.screen.pixelDepth 24 24 32
window.screen.msOrientation landscape-primary undefined undefined
document.body.clientWidth 1503 964 964
document.body.clientHeight 2555 5674 3201
document.body.scrollWidth 1848 4900 987
document.body.scrollHeight 2555 5695 3243

果然實作才是硬道理,可以得到:

實際解析度寬:window.screen.width * window.devicePixelRatio

實際解析度高:window.screen.height * window.devicePixelRatio

針對 Android 8.0 的分割視窗會發現 window.screen.height 變小,仍可使用 (分割時為 247)

至於最適化 (Auto fitting) 螢幕大小部分,我原先是先在 HTML5 的 HEAD 預埋:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=0.1″ id="metaViewport" />

再透過 javascript 依 svg 圖面大小變更 metaViewport.setAttribute(“content", sViewportContent);

從網頁搜尋到的結果,一般是將 width=設定寬度, height=設定高度

自己整理表格後發現,用 sViewportContent = “initial-scale=" + scaleWidth; 即可。

使用 svg.width / window.screen.width 或 svg.height / window.screen.height 就看設計者要以寬度或高度為目標來調整。

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[iOS] 上傳 App 到 App Store 供散佈


終於到這陣子最後一篇,上傳第一個 iOS App 真的很麻煩,開發還沒這麼多狀況,有些圖是完成後再補的,所以圖片的時間可能會有點錯亂。

這篇主要是依據微軟官方文件操作,再做點圖片心得分享,請務必參考官方文件。

將 Xamarin.iOS 應用程式發佈到 App Store https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/publishing-to-the-app-store

上傳 App 之前,須先建立 App 密碼,可參考這篇建立:

使用 App 專用密碼 https://support.apple.com/zh-tw/HT204397

建立 App 密碼

建立 App 密碼

完成建立密碼後,會收到通知信,那個藍色的圈圈是寄來就這樣,我也是醉了,收件人帳號就在信頭,信中馬賽克好像沒啥作用。

收到建立密碼通知信

收到建立密碼通知信

從「將 Xamarin.iOS 應用程式發佈到 App Store 」步驟 11 開始,選擇手動佈建 [Manual Provision] ,再點選 [iOS Bundle Signing…] ,會跳出 [專案選項] ,這邊設定 [組態]、[平台]、[簽署識別]、[佈建設定檔] ,其中 [簽署識別]、[佈建設定檔] 參考前一篇 [iOS] 建立 App Store 簽名用的憑證給 Visual Studio for Mac 使用 完成。

設定編譯選項

設定編譯選項

從選單 [組建] > [封存以供發行]

選單封存與發行

選單封存與發行

點選 [簽署並散發]

簽署並散發

簽署並散發

點選 [App Store] ,並點選 [下一步]

儲存至磁碟並開啟應用程式產生器

儲存至磁碟並開啟應用程式產生器

依照編譯選項選擇 [簽署識別]、[佈建設定檔],並點選 [下一步]

佈建設定檔

佈建設定檔

點選 [發行]

存檔並發行

存檔並發行

點選 [發行] 後,會讓你選擇儲存位置,MacBook Pro 我不太會選位置,最後放棄讓它存在預設位置,我再用 Finder 管理它,其中圖上的 [標記] 建議不要點,因為可能會造成死當,我變成要把整個 [Visual Studio for Mac] 強制中止後重來。

存檔對話盒

存檔對話盒

如果沒有死當的話,你可以得到下面那個畫面讓你回到 [上一步] 重來。

發行失敗

發行失敗

如果你沒亂按 [標記] 讓它存檔在預設位置,就可以正常發行成功。

發行成功

發行成功

看到發行成功很容易誤會已經完成,其實只是把要上傳的 App 準備好而已,接著點選上圖的 [開啟應用程式載入器] 準備上傳。

樣板選擇器

樣板選擇器

點選上圖的 [遞送應用程式] ,從先前存檔的位置找出編譯封存好的 App。

開啟檔案對話盒

開啟檔案對話盒

選擇上圖[打開] 準備上傳檔案。

準備傳送檔案

準備傳送檔案

點選上圖 [下一步] ,點選 [傳送] 開始上傳檔案。

上傳檔案中

上傳檔案中

完成上傳。

AppUpload_15.1_UploadOk

上傳完成

告知上傳完成。

AppUpload_15.2_SendOk

表示已經上傳到 App Store

上傳完成後,不代表就完成了,還必須去 [App Store Connect] 網站,選擇 [我的 App] ,確認發行,這部分 [Visual Studio for Mac] 沒辦法代勞。

之後網頁會顯示等待審核,並會收到一封信表示完成建造過程。

完成上傳通知信

完成上傳通知信

沒事的時候會收到一堆狀態顯示 ReView 審核中的信件,很多,所以就懶得再貼了。我因為 App 一開始要輸入帳密,所以審核人員懷疑我是企業內部軟體,系統發信通知我要我上 [App Store Connect] 回應審核意見。

審核意見通知信

審核意見通知信

審核意見說依據 Guideline 2.1 要確認我的 App 是不是只給公司員工使用,我看半天,Guideline 2.1 並沒談到這件事,不過還是回說要給客戶用,員工只是其中之一。回完半天後就收到上架通知信了。

上架通知信

上架通知信

看起來上架審核應該是美國上班時間,因為除了系統自動郵件外,每次 eMail 通知信來,都是台灣凌晨在發。

總算,終於完成上架,步驟繁雜,只好自己留步驟圖,下次自救用。

 

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[iOS] 建立 App Store 簽名用的憑證給 Visual Studio for Mac 使用


這篇圖多。主要是因為很繁瑣,不記錄下來,自己以後還要再找一遍資料,還是留下紀錄給自己看比較保險。

建立簽名用的憑證可以給公司所有 App 簽名,但是本篇後半段產生佈建檔設定部分會跟 App 產生關聯,所以先完成 App 開設會比較順,當然也可以先處理憑證建立後,再來進行 App 開設,再建立佈建檔,我自己第一次就是屬於後半部的方法,但是我覺得先建 App 設定會比較順。

App 開設要在 Apple 網站 iTunes Connect 網站填寫,此外,Visual Studio for Mac 的專案屬性也要一致,這部分微軟文件已經寫得很清楚了參考:

在 iTunes Connect 中設定應用程式 https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/itunesconnect

在上面這篇連接中會看到需要將 App 的畫面擷圖上傳,所以我前一篇先放:[iOS] App Store Connect 上傳螢幕擷圖

在設定提交 App 審核前,這資料隨時可以修改,所以記得沒事就按下網頁內的儲存,避免設定時間過長,可能觸發網頁軟體的其他問題,導致一切從頭來。

這篇後續部分跟微軟文件這篇關聯很大,建議同步閱讀:

Apple 帳戶管理 https://docs.microsoft.com/zh-tw/xamarin/cross-platform/macios/apple-account-management

我推估這步驟通常一個公司一年大概要重複一次,接下來就開始吧。

在本機產生一個私密金鑰,在 Finder 搜尋 [鑰匙圈存取]。

鑰匙圈存取

鑰匙圈存取

從選單選擇 [鑰匙圈存取] > [憑證輔助程式] > [製作憑證]

選取製作憑證

選取製作憑證

替憑證取個好記的名字

憑證取名

憑證取名

確認製作憑證。

確認製作憑證

確認製作憑證

輸入憑證有效日期,預設為365天。這部份很奇怪,我輸入了3650天,過程中也是顯示10年,上傳 Apple 網站後顯示 1 年,重新製作也是一樣,就先使用預設值了。

輸入憑證有效日期

輸入憑證有效日期

輸入個人與公司資訊。

個人與公司資訊

個人與公司資訊

以下視窗基本上我都是按下繼續,所以就連續貼圖,不做文字說明。

憑證配對資訊

憑證配對資訊

密鑰用法擴充欄位

密鑰用法擴充欄位

延伸密鑰用法擴充欄位

延伸密鑰用法擴充欄位

基本限制擴充欄位

基本限制擴充欄位

主題替用名稱擴充欄位

主題替用名稱擴充欄位

這個類似IE匯入憑證時,選擇 [個人] 的意思,這就是說這個憑證有效範圍是使用這個登入 MacBook Pro 帳號為限。

指定憑證存放的位置

指定憑證存放的位置

完成憑證製作

完成憑證製作

到此本機憑證製作完成,若隨時要檢視憑證,可以在 [鑰匙圈存取] 中檢視。

檢視憑證

檢視憑證

接下來要將憑證匯出成為檔案,以便上傳Apple網站換成真正可替程式碼簽名的檔案,從選單選擇 [鑰匙圈存取] > [憑證輔助程式] > [從憑證授權要求憑證]

從憑證授權要求憑證

從憑證授權要求憑證

輸入憑證資訊

憑證資訊

憑證資訊

選擇存檔位置,不得不說,我在 MacBook Pro 每次要換路徑都有障礙,最後乾脆還是存在預設位置,我處理完成後再搬移到我計畫的位置方便管理。

選擇存檔位置

選擇存檔位置

完成存檔

完成存檔

接下來準備上傳到Apple,由於 IE11 在蘋果網站有的時候會出問題,為求保險起見,可以考慮用 Chrome ,我作圖是用 Chrome ,但第一次上傳時是用 IE11 。首先連線到開發者網站:http://developer.apple.com/

開發者網站首頁

開發者網站首頁

點選右上角的 [Account]

帳號中心

帳號中心

點選 [Certifates, IDs & Profiles] ,從左側選單或右側圖形連結都可以按,我習慣從左側選單連結。

從下面畫面左側選單選到 [Certificates] > [All] ,第一次使用時應該是空的,所以點選右上角的 [Add] 加入新的憑證。

憑證管理中心

憑證管理中心

由於是為了申請上傳 App Store 用的憑證,就直接選擇 [App Store and Ad Hoc] 。

選產品發布用

選產品發布用

憑證簽名要求的說明

憑證簽名要求的說明

上面只是一個告知網頁,直接按下 [Continue] 進入上傳憑證畫面。

選擇憑證檔案

選擇憑證檔案

上傳完憑證後,就會產生可下載的 .cer 檔案,如果沒在此時下載,也可以在憑證清單點選憑證後,在點選 [Download] 下載。

下載或移除憑證

下載或移除憑證

憑證到此完全申請完成,如果沒有需要考慮替App簽名,可以暫時擺一邊,但正常都是要簽名才會申請憑證,所以繼續往下走。

另外也會透過 eMail 提醒你完成憑證申請。

eMail 通知

eMail 通知

由於只是要上傳 App Store ,其他功能可以忽略不管,從左側選單選到 [Provisioning Profiles] > [All] ,第一次使用時應該是空的,所以點選右上角的 [Add] 加入新的佈建設定檔。

新增佈建設定檔

新增佈建設定檔

選擇 App ID,這邊要從 iTunes Connect 內已建立的應用程式才會出現在下拉式選單,所以前面才會建議先去 iTunes Connect 進行應用程式新增與設定再來進行。

選擇 App ID

選擇佈建檔的用途,一個憑證可以有多個佈建檔,所以自己要分清楚,當然忘了也可以從佈建檔清單看設定的內容。一樣,只管要上傳軟體用,所以選擇 [App Store] 。

選擇散佈到 App Store

選擇散佈到 App Store

選擇對應的憑證,憑證Apple限制只能申請兩個,我猜是考慮一年過期要續用時可以選,所以一年後應該是可以從佈建檔清單中編輯去改憑證。

選擇憑證

選擇憑證

完成後可下載佈建檔,不過在 Visual Studio for Mac 可以下載,這邊下載下來也不知道要扔哪,就直接完成即可。

開啟 Visual Studio for Mac ,並開啟目標專案。從選單選擇 [喜好設定]

選單選擇喜好設定

選單選擇喜好設定

從左側選單選擇 [Apple 開發人員帳號] ,並輸入帳密。

輸入 Apple 開發人員帳號

輸入 Apple 開發人員帳號

點選右側 [檢視詳細資料] 按鈕。

開發人員帳號

開發人員帳號

登入後會自動下載憑證與佈建設定檔,若網站上有更新,可以點選 [下載所有設定] 檔按鈕。

完成後的佈建設定檔

完成後的佈建設定檔

到此基本上是完成App簽名前,跟憑證相關的設定,下面另外補充我自己的錯誤狀況。

我在  iTunes Connect 內建立的應用程式資訊與 Visual Studio for Mac 專案屬性有大小寫不一致情形,所以一開始狀態顯示不在 Keychain 中,當我改完專案屬性後,狀態才變成有效。

狀態錯誤

狀態錯誤

測試過程中,發現在此點選建立憑證,可以直接完成佈建檔前所有程序,包含從 [鑰匙圈存取] 到網站上傳憑證與下載匯入,忽然覺得前面一堆步驟做的沒啥意義… 不過他會自己取的名字,如前面圖上後面有括號 (Supportde-MacBook-Pro.local) ,對於名字有點潔癖的我稍感安慰…

快速建立憑證

快速建立憑證

特別放最後一張圖的用意就是…

#不能只有我看到 #不能只有我嘔到

 

Categories: 工作點滴, 技術分享 | 標籤: | 1 則迴響

[iOS] App Store Connect 上傳螢幕擷圖


在微軟線上文件:在 iTunes Connect 中設定應用程式

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/itunesconnect

有提到,「盡可能使用真實、高解析度的 Retina iOS 硬體 (而不是在 iOS 模擬器中) 拍攝螢幕擷取畫面。」,但大多數人都不可能買實機去測試,因此只能用虛擬機擷圖。

上傳圖片的位置

上傳圖片的位置

App Store Connect 中,點選到耀上傳的應用程式,其中,iPhone 5.8 是可留空,必須上傳的是:

  1. iPhone 5.5″ : 可選用 iPhone 8 Plus,1242×2208 pixel
  2. iPad 12.9″ : 可選用 iPad Pro,2048×2732 pixel

選用 iPhone 8 Plus 虛擬機擷圖時,務必要變更解析度為 [High Quality] ,預設為 [Device Default] ,會依據虛擬機在螢幕上的大小自動調整解析度,因此只有選擇 [High Quality] 時,才會使用實體解析度。

iPhone 8 Plus 解析度

iPhone 8 Plus 解析度

調整好後,就使用 [New Screen Shot] 或是熱鍵 [Command+S] 擷圖,擷圖會自動產生在桌面上。

iPhone 8 Plus 擷圖

iPhone 8 Plus 擷圖

同樣,選用 iPad Pro 虛擬機擷圖時,變更解析度為 [High Quality] 。

iPad Pro 解析度

iPad Pro 解析度

同樣使用 [New Screen Shot] 或是熱鍵 [Command+S] 擷圖。

iPad Pro 擷圖

iPad Pro 擷圖

檢查螢幕擷圖是否符合 Apple 的要求,當然不符合的話,上傳就會被踢。

一開始不知道要調 High Quality ,就被 App Store Connect 踢,就紀錄一下提醒自己。

 

Categories: 工作點滴, 技術分享 | 標籤: | 1 則迴響

[iOS]補充:在 MacBook Pro 上安裝 fastline 給 Visual Studio for Mac 使用


在使用 Visual Studio for Mac 開發 iOS App 時,需要安裝 XCode 及 fastline 一起運作。

XCode 比較簡單,在 App Store 下搜尋安裝就結束了。

fastline 則須自行下載安裝,步驟請參考:適用於 iOS 的 fastline 簡介

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/provisioning/fastlane/index

這篇名為補充,就是補充文件上不清楚的。圖中馬賽克的部分,是在 MacBook Pro 裡的登入帳號。

參考「適用於 iOS 的 fastline 簡介」步驟 3,裡面提到按 [Control] 鍵,這步驟是按 [Control] 鍵不放,滑鼠右鍵選單選擇 [打開] 即可,安裝畫面如下。

安裝 fastlane

安裝 fastlane

參考「適用於 iOS 的 fastline 簡介」步驟 4,要執行 [which fastlane] 是要透過終端機來執行,可使用 Finder 輸入 [終端機] 來開啟使用。

找到終端機

找到終端機

第一次安裝,是找不到 fastlane 的,如果電腦夠新,也沒有 [.bash_profile] 這個檔案,因此針對第一次安裝的,可改用下面操作:

a. 使用 [ls ~.bash_profile] 檢查設定檔案是否存在。ls 類似 Windows 中的 dir 。

檢查設定檔案是否存在

檢查設定檔案是否存在

如圖,[No such file or directory] 表示沒有這個檔案或目錄,因此輸入 [cd ~/] 改變目錄位置。

b. 然後使用 [vim .bash_profile] 來編輯產生一個新的檔案。

輸入路徑

輸入路徑

輸入 [i] 下方會出現 [– INSERT –] 進入插入模式,參考「適用於 iOS 的 fastline 簡介」步驟 6,輸入 [export PATH="$HOME/.fastlane/bin:$PATH"],如上圖。

c. 按下 [esc] 鍵,離開插入模式,輸入 [:wq] 如下圖,即可存檔離開。

存檔離開

存檔離開

 

d. 輸入 [source .bash_profile] 重新載入,輸入 [echo $PATH] 檢查路徑。

路徑已加入

路徑已加入

可以看到在步驟 c 中輸入的路徑出現在紅色框框處。參考「適用於 iOS 的 fastline 簡介」步驟 7,輸入 [which fastlane] 就會出現 fastlane 的路徑。

若只是更新 fastlane ,基本上就不用在執行上面步驟了。


在已經申請好簽署程式碼的憑證或是有變更時,還要透過 fastlane 更新憑證。這部分可參考:適用於 iOS 的 fastlane – cert

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/provisioning/fastlane/cert

如果只要上傳 App Store ,不需要管上面文件的其他部分,只要執行 [fastlane cert] 即可,如下圖。

讀入認證資料

讀入認證資料

中間會要求輸入開發者帳號的 Apple ID,需與蘋果網站一致。

iOS 上傳軟體步驟很繁瑣,為了自己下次能順利重做,自己寫 blog 是最容易記住跟反覆查閱的方案。

 

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[iOS] WebView 加上回前頁的手勢


在 Android 因為本身就有回前頁的功能按鈕,因此在以 HTML5 網頁為核心的行動裝置軟體本身並不需要做特別設計。

在 iOS 如 iPhone/iPad 只有下方的 Home 鍵,因此需要考慮一個方式,不管網頁如何跑,都能有回前頁的方案。

一般來說,在 iOS 大多數的軟體不是使用導覽工具列處理,就是利用從右往左滑的翻頁手勢,代表回到上一場景。

因此只要利用這個方向使用從右往左滑的翻頁手勢,代表網頁回前頁的功能。


public override void ViewDidLoad()
{

// 略

var swipeBackRecognizer = new UISwipeGestureRecognizer(HandleSwipeGoBack);
swipeBackRecognizer.Direction = UISwipeGestureRecognizerDirection.Right;

WebView.AddGestureRecognizer(swipeBackRecognizer);

}

void HandleSwipeGoBack()
{

WebView.GoBack();

}


假定畫面上已經有一個 WebView 控制項,就可以在載入事件中直接加入 WebView 物件變數的手勢設定。

參考:https://stackoverflow.com/questions/43779824/how-to-swipe-back-in-xamarin-ios

 

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[iOS] WebView 瀏覽 http 的安全性設定 – Visual Studio for Mac


去年做 Android 的 App ,今年老闆要我做 iOS 的 App 。

我的大部分還是靠 HTML5 網頁呈現即時資訊,所以我主要只要把 App 包個 WebView 即可。

一開始我是在 Xamarin.iOS 大分類下看說明學著寫,例如這個 WebView:

https://docs.microsoft.com/zh-tw/xamarin/ios/user-interface/controls/uiwebview

我一開始以為我自己看得很透了,直接開始寫,但是怎樣都卡在連不上我的手機網頁,只好從上面網址抓線上範例來測試,範例網址的確可以正確呈現:

https://xamarin.com/

但是我只換網址為我的手機網頁就不行,畫面全白… 我開始鎖定是 http 跟 https 的差異。一找,果然在說明書找到:

https://docs.microsoft.com/zh-tw/xamarin/xamarin-forms/user-interface/webview

這個網頁是介紹 iOS/Android/Windows Phone 三種行動裝置共用的設計部分,在網頁中可以看到,iOS 特別註解從 iOS 9 以後安全性變更,預設不能瀏覽 http ,要修改安全性設定…

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

 

冏… 為啥 iOS 的特殊設定不是放在 Xamarin.iOS 下,而是放在 Xamarin Forms 下…

但是又碰上個難題,我是直接在 MacBook Pro 下安裝 Visual Studio for Mac ,沒有另外安裝純文字編輯器可以直接輸入安全性規則,比對原始碼內容,在介面上測試輸入如下:

設定網址安全性

設定網址安全性

重新編譯執行,果然可以正常瀏覽 http 網址。

編輯步驟:

  1. 在最下方點選 [新增項目]
  2. 類型選 [字典]
  3. 編輯項目名稱改為 NSAppTransportSecurity
  4. 在屬性 NSAppTransportSecurity 下方點選 [新增項目]
  5. 類型選 [布林值]
  6. 編輯項目名稱改為 NSAllowsArbitraryLoads
  7. 值 改為 是

存檔後會跟上圖一樣。

微軟網站的線上手冊沒考慮直接使用 Visual Studio for Mac 編輯,所以只能自己試啦。

可以看到專案名叫做 HelloWebView … 跟 Hello World 差不多的意思~~~

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[Outlook] iOS 寄來的信件亂碼


從開發者的角度來看,貧果的技術真的很差。

iOS 都到 11 版了,它的內建郵件軟體還不能設定寄件編碼。

依據 RFC 多媒體郵件 MIME 規範,信頭要標記郵件編碼,軟體才能正確的解碼。

關於 MIME 信件格式架構圖可參考這篇:Outlook 亂碼問題

在台灣最常碰上的就是從 iPhone / iPad 寄來的郵件是亂碼。

今天同事丟來一封信,無法辨識,從關鍵字來看就可以找到 iPhone 發出。

Outlook 2016 變更編碼

Outlook 2016 變更編碼

註:圖上破碎的字塊是故意圖形處理,避免郵件被人工解碼。

早先的 Outlook 版本,收信時就會將信件轉成 Unicode 編碼,如果轉碼錯誤是沒救的。

在台灣由於預設編碼通常為 big5 ,iOS 當出現日韓簡罕時,可能是選字造成 (廢話,一堆長很像的小字,不能分辨是繁體或簡體也是正常的),可能會自動採用簡體來編碼郵件,Outlook 還可以設定使用外寄編碼,例如 utf-8 ,就不會有解碼問題。

收到亂碼信請千萬記住,是寄件端問題,寄件端未依規範編碼,導致收件端無法採用正確解碼,只能依照電腦預設編碼解碼,要改編碼時,優先依照寄件者國別去猜,其次是常用編碼,例如 utf-8 ,當然幾大語系也是猜測重點。

  1. 在 Outlook 2013/2016 可以依照上圖變更編碼,選單的 [動作] > [其他動作] > [編碼] ,以這篇來說改用 簡體中文 就可以解碼。
  2. 如果沒有 Outlook ,我個人習慣都會安裝 Live Mail 來檢視與調整,從 WebMail 下載原始郵件為 .eml 格式,再給 Live Mail 解碼。
  3. Live Mail 在 2017/01/10 被微軟下架,大多數人是沒備份到,所以還有一種做法,把 .eml 更名為 .mht ,給 IE 開啟,就可以在 IE 解碼。
  4. 我自己有寫一個加解密編輯程式支援 .htm / .eml / .mht 預覽,其實就是用 WebBrowser Control 去開啟這個檔案,改編碼時用 TextBox 改,再把內容餵給 WebBrowser Control 預覽。

講實在的,iOS 只是包裝好,技術不怎樣,但我也很佩服貧果,一堆人反映缺寄件編碼就是不改,這大概是為了讓其他 App 能夠生存吧。

資訊人員只好自救啦。

Categories: Office, 工作點滴, 技術分享 | 標籤: | 發表留言

在WordPress.com寫網誌.

%d 位部落客按了讚: