使用 mtouch 搭售 Xamarin.iOS 應用程式
iPhone 應用程式會以應用程式套件組合的形式來提供。 這些套件組合是副檔名為 .app
的目錄,內含您的程式碼、資料、組態檔以及 iPhone 用來了解您應用程式的資訊清單。
將 .NET 可執行檔轉變為應用程式的程序大多由 mtouch
命令來驅動,這個工具會整合許多將應用程式轉變為套件組合所需的步驟。 此工具也可用來在模擬器中啟動您的應用程式,以及將軟體部署到實際的 iPhone 或 iPod Touch 裝置。
詳細指示
請查看 mtouch(1) 手冊頁面,內有 mtouch 工具的所有可能使用方式。
安裝
在 Mac 上,mtouch
會與 Xamarin.iOS 配套。 您可以在下列目錄找到它:
/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin
若要讓 mtouch
方便使用,請將它的上層目錄加入您系統的 PATH
環境變數。
例如,若要在 Bash 中這樣做,請將下行加入 ~/.bash_profile 檔案的結尾:
export PATH=$PATH:/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin
警告
若要使用 mtouch
,請勿依賴 /Developer/MonoTouch/usr/bin,這是指向 /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin 的符號連結。 此符號連結存在的原因僅是為了相容於未安裝在 /Library/Frameworks/... 中的舊版 MonoTouch,且可能會在未來版本中消失。
建築物
mtouch
命令可使用三種不同的方式編譯程式碼:
- 編譯來進行模擬器測試。
- 編譯來部署裝置。
- 將可執行檔部署至裝置。
模擬器的建置
當您開始使用時,最常見的案例是在模擬器中試驗應用程式,因此您會使用 mtouch -sim
將程式碼編譯為模擬器套件。 其作法如下:
$ mtouch -sim Hello.app hello.exe
裝置的建置
若要為您將會使用 mtouch -dev
選項來建置應用程式的裝置建置軟體,您還需要提供用來簽署應用程式的憑證名稱。 下列範例顯示如何為裝置建置應用程式:
$ mtouch -dev -c "iPhone Developer: Miguel de Icaza" foo.exe
在此特殊案例中,我們會使用 "iPhone Developer: Miguel de Icaza" 憑證來簽署應用程式。 這個步驟很重要,否則實體裝置會拒絕載入應用程式。
執行應用程式
在模擬器上啟動
擁有應用程式套件組合後,在模擬器上啟動就變得非常簡單:
$ mtouch --sdkroot /Applications/Xcode.app -launchsim Hello.app
如果未設定 --sdkroot
旗標,則其值會預設為 xcode-select 路徑,並導致下列警告:
例如:warning MT0061: No Xcode.app specified (using --sdkroot), using the system Xcode as reported by 'xcode-select --print-path': /Applications/Xcode.app/Contents/Developer
上述命令列會產生一些輸出,如下所示:
Launching application
Application launched
PID: 98460
Press enter to terminate the application
強烈建議您也要保存標準輸出和標準錯誤檔案的記錄,以便協助您進行偵錯。 Console.WriteLine
的輸出會傳送至 stdout
,而 Console.Error.WriteLine
和任何其他執行階段錯誤訊息的輸出則會傳送至 stderr
。
若要這樣做,請使用 --stdout
和 --stderr
旗標:
../../tools/mtouch/mtouch --launchsim=Hello.app --stdout=output --stderr=error
如果您的應用程式失敗,您可以查看輸出和錯誤來診斷問題。
部署至裝置
若要部署至您的裝置,您需要佈建裝置,如 Apple 的管理裝置文件所述。 正確佈建裝置後,您可以使用 mtouch 命令將已編譯的 ".app" 部署至裝置。 您可以使用下列命令來進行此作業:
$ mtouch —sdkroot /Applications/Xcode.app -installdev=MyApp.app
如果未設定 --sdkroot
旗標,則其值會預設為 xcode-select 路徑,並導致下列警告:
例如:warning MT0061: No Xcode.app specified (using --sdkroot), using the system Xcode as reported by 'xcode-select --print-path': /Applications/Xcode.app/Contents/Developer
這些步驟通常會由 Visual Studio for Mac 執行。
參考
請參閱 mtouch(1) 手冊頁面,以取得其他命令列選項的詳細資料。