共用方式為


watchOS 疑難解答

此頁面包含您可能遇到的問題的其他資訊和因應措施。

已知問題

一般

  • 舊版 Visual Studio for Mac 錯誤地將其中一個 AppleCompanionSettings 圖示顯示為 88x88 圖元;如果您嘗試提交至 App Store,則會導致 遺漏圖示錯誤 。 此圖示應該是 87x87 像素(@3x Retina 螢幕的 29 個單位)。 您無法在 Visual Studio for Mac 中修正此問題 - 在 Xcode 中編輯影像資產,或手動編輯 Contents.json 檔案。

  • 如果 Watch Extension Project 的 Info.plist > WKApp 套件組合標識碼正確設定為符合 Watch App 套件組合標識符,調試程式將無法連線,而 Visual Studio for Mac 會等候訊息「等待調試程式連線」

  • 通知模式支援 偵錯 ,但可能不可靠。 重試有時會正常運作。 確認 Watch App 的 Info.plist WKCompanionAppBundleIdentifier 已設定為符合 iOS 父/容器應用程式的套件組合識別碼(也就是在 iPhone 上執行的套件組合識別碼)。

  • iOS 設計工具不會顯示 [概覽] 或 [通知] 介面控制器的進入點箭號。

  • 您無法將兩個 WKNotificationControllers 新增至分鏡腳本。 因應措施: notificationCategory 分鏡腳本 XML 中的專案一律會以相同的 id插入。 若要解決此問題,您可以新增兩個或更多通知控制器,在文本編輯器中開啟分鏡腳本檔案,然後手動將元素變更 id 為唯一。

    在文本編輯器中開啟分鏡腳本檔案,並手動將id元素變更為唯一

  • 嘗試啟動應用程式時,您可能會看到「尚未建置應用程式」錯誤。 當啟動專案設定為監看式延伸模組專案時,就會發生此情況。 修正方式是選取 [ 全部建 > 置重建 ],然後重新啟動應用程式。

從圖示影像移除Alpha色板

圖示不應包含 Alpha 色板(Alpha 色板定義影像的透明區域),否則 App Store 提交期間會拒絕應用程式,並出現類似以下的錯誤:

Invalid Icon - The watch application '...watchkitextension.appex/WatchApp.app'
contains an icon file '...watchkitextension.appex/WatchApp.app/Icon-27.5@2x.png'
with an alpha channel. Icons should not have an alpha channel.

使用預覽應用程式輕鬆移除 Mac OS X 上的 Alpha 通道:

  1. 在預覽中開啟圖示影像,然後選擇 [檔案>匯出]。

  2. 如果Alpha色板存在,出現的對話框將會包含 Alpha 複選框。

    如果Alpha色板存在,出現的對話框將會包含Alpha複選框

  3. 取消勾選 Alpha 複選框,並將 檔案儲存 到正確的位置。

  4. 圖示影像現在應該會通過Apple的驗證檢查。

手動新增介面控制器檔案

重要

Xamarin 的 WatchKit 支援包括設計 iOS 設計工具中的監看腳本(在 Visual Studio for Mac 和 Visual Studio 中),不需要下列步驟。 只要在 Visual Studio for Mac Properties pad 中提供類別名稱,C# 程式代碼檔案就會自動建立。

如果您使用 Xcode 介面產生器,請遵循下列步驟為監看應用程式建立新的介面控制器,並啟用與 Xcode 的同步處理,讓輸出和動作可在 C# 中使用:

  1. 在 Xcode Interface Builder開啟監看應用程式的 Interface.storyboard

    在 Xcode 介面產生器中開啟分鏡腳本

  2. 將新的 InterfaceController 拖曳到分鏡腳稿:

    A InterfaceController

  3. 您現在可以將控件拖曳到介面控制器上(例如標籤和按鈕),但您尚未建立輸出或動作,因為沒有 .h 頭檔。 下列步驟會導致建立必要的 .h 頭檔。

    版面配置中的按鈕

  4. 關閉分鏡腳本並返回 Visual Studio for Mac。 在監看應用程式延伸模組專案中建立新的 C# 檔案MyInterfaceController.cs(或您喜歡的任何名稱)(而非分鏡腳本所在的監看應用程式本身)。 新增下列程式代碼(更新命名空間、classname 和建構函式名稱):

    using System;
    using WatchKit;
    using Foundation;
    
    namespace WatchAppExtension  // remember to update this
    {
        public partial class MyInterfaceController // remember to update this
        : WKInterfaceController
        {
            public MyInterfaceController // remember to update this
            (IntPtr handle) : base (handle)
            {
            }
            public override void Awake (NSObject context)
            {
                base.Awake (context);
                // Configure interface objects here.
                Console.WriteLine ("{0} awake with context", this);
            }
            public override void WillActivate ()
            {
                // This method is called when the watch view controller is about to be visible to the user.
                Console.WriteLine ("{0} will activate", this);
            }
            public override void DidDeactivate ()
            {
                // This method is called when the watch view controller is no longer visible to the user.
                Console.WriteLine ("{0} did deactivate", this);
            }
        }
    }
    
  5. 在監看應用程式延伸模組專案中建立另一個新的 C# 檔案MyInterfaceController.designer.cs,並新增下列程式代碼。 請務必更新命名空間、classname 與 Register 屬性:

    using Foundation;
    using System.CodeDom.Compiler;
    
    namespace HelloWatchExtension  // remember to update this
    {
        [Register ("MyInterfaceController")] // remember to update this
        partial class MyInterfaceController  // remember to update this
        {
            void ReleaseDesignerOutlets ()
            {
            }
        }
    }
    

    提示

    您可以選擇性地將此檔案設為第一個檔案的子節點,方法是將它拖曳至 Visual Studio for Mac Solution Pad 中的其他 C# 檔案。 然後會顯示如下:

    Solution Pad

  6. 選取 [建置全部建>置],讓 Xcode 同步處理能夠辨識我們所使用的新類別(透過 Register 屬性)。

  7. 以滑鼠右鍵按下監看應用程式腳稿檔案,然後選取 [以 > Xcode 介面產生器開啟] 來重新開啟分鏡腳本:

    在 Interface Builder 中開啟分鏡腳本

  8. 選取新的介面控制器,併為其提供您在上面定義的類別名稱,例如 MyInterfaceController. 如果一切正常運作,它應該會自動出現在 [ 類別: ] 下拉式清單中,而且您可以從該處選取它。

    設定自定義類別

  9. 選擇 Xcode 中的 [ 小幫手編輯器] 檢視 (具有兩個重迭圓形的圖示),讓您可以並排查看分鏡腳本和程式碼:

    小幫手編輯器工具列專案

    當焦點位於程式代碼窗格中時,請確定您正在查看 .h 頭檔,如果不是以滑鼠右鍵按兩下階層連結列,請選取正確的檔案 (MyInterfaceController.h

    選取 MyInterfaceController

  10. 您現在可以透過 Ctrl + 從分鏡腳本拖曳.h 頭檔來建立輸出和動作。

    建立出口和動作

    當您放開拖曳時,系統會提示您選取是否要建立輸出或動作,然後選擇其名稱:

    輸出和動作對話框

  11. 儲存分鏡腳本變更並關閉 Xcode 之後,請返回 Visual Studio for Mac。 它會偵測頭文件變更,並將程式代碼自動新增至 .designer.cs 檔案:

    [Register ("MyInterfaceController")]
    partial class MyInterfaceController
    {
        [Outlet]
        WatchKit.WKInterfaceButton myButton { get; set; }
    
        void ReleaseDesignerOutlets ()
        {
            if (myButton != null) {
                myButton.Dispose ();
                myButton = null;
            }
        }
    }
    

您現在可以在 C# 中參考控制件 (或實作動作!

從命令行啟動監看應用程式

重要

根據預設,您可以在 Visual Studio for Mac 和 Visual Studio 中使用自定義執行參數,在一般應用程式模式中啟動監看應用程式,也可以在 [概覽] 或 [通知] 模式中啟動。

您也可以使用命令行來控制 iOS 模擬器。 用來啟動監看式應用程式的命令行工具為 mtouch

以下是完整的範例(在終端機中以單行方式執行):

/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin/mtouch --sdkroot=/Applications/Xcode.app/Contents/Developer/ --device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6
--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

您需要更新以反映應用程式的參數為 launchsimwatch

--launchsimwatch

包含監看式應用程式和延伸模組之 iOS 應用程式的主要應用程式套件組合完整路徑。

注意

您需要提供的路徑是針對 iPhone應用程式.app檔案,也就是將部署到iOS模擬器且同時包含手錶延伸模組和監看應用程式的路徑。

範例:

--launchsimwatch=/path/to/watchkitproject/watchsample/bin/iPhoneSimulator/Debug/watchsample.app

通知模式

若要測試應用程式的 通知 模式,請將 參數設定 watchlaunchmodeNotification ,並提供包含測試通知承載的 JSON 檔案路徑。

通知模式需要承載參數

例如,將這些自變數新增至 mtouch 命令:

--watchlaunchmode=Notification --watchnotificationpayload=/path/to/file.json

其他自變數

其餘的自變數如下所述:

--sdkroot

必要。 指定 Xcode 的路徑(6.2 或更新版本)。

範例:

 --sdkroot /Applications/Xcode.app/Contents/Developer/

--裝置

要執行的模擬器裝置。 您可以使用特定裝置的 udid,或使用運行時間和裝置類型的組合,以兩種方式指定。

確切值會因計算機而異,而且可以使用Apple的 simctl 工具進行查詢:

/Applications/Xcode.app/Contents/Developer/usr/bin/simctl list

UDID

範例:

--device=:v2:udid=AAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

運行時間和裝置類型

範例:

--device=:v2:runtime=com.apple.CoreSimulator.SimRuntime.iOS-8-2,devicetype=com.apple.CoreSimulator.SimDeviceType.iPhone-6