watchOS 문제 해결watchOS Troubleshooting

이 페이지에는 발생할 수 있는 문제에 대 한 추가 정보 및 해결 방법이 포함 되어 있습니다.This page contains additional information and workarounds for issues you may encounter.

알려진 문제점Known Issues

일반General

  • 이전 버전의 Mac용 Visual Studio 잘못 된 설정 아이콘 중 하나를 88x88 픽셀로 잘못 표시 합니다. 그러면 앱 스토어에 제출 하려고 할 때 아이콘 오류가 표시 되지 않습니다.Earlier releases of Visual Studio for Mac incorrectly show one of the AppleCompanionSettings icons as being 88x88 pixels; which results in a Missing Icon Error if you attempt to submit to the App Store. 이 아이콘은 87x87 픽셀 ( @3x 레 티 나 화면의 경우 29 단위) 이어야 합니다.This icon should be 87x87 pixels (29 units for @3x Retina screens). Mac용 Visual Studio에서이 문제를 해결할 수 없습니다. Xcode에서 이미지 자산을 편집 하거나 이 샘플과일치 하도록 콘텐츠. json 파일을 수동으로 편집 합니다.You cannot fix this in Visual Studio for Mac - either edit the image asset in Xcode or manually edit the Contents.json file (to match this sample).

  • Watch 확장 프로젝트의 info.plist > WKApp 번들 Id가 watch 앱의 번들 id와 일치 하도록 올바르게 설정 되지 않은 경우 디버거는 연결에 실패 하 고 "디버거를 Mac용 Visual Studio 다음으로 대기 하는 중입니다." 라는 메시지가 나타납니다. 연결 " .If the Watch Extension Project's Info.plist > WKApp Bundle ID is not correctly set to match the Watch App's Bundle ID, the debugger will fail to connect and Visual Studio for Mac will wait with the message "Waiting for debugger to connect".

  • 디버깅은 알림 모드에서 지원 되지만 안정적이 지 않을 수 있습니다.Debugging is supported in Notifications mode but can be unreliable. 작업을 다시 시도 하는 경우도 있습니다.Retrying will sometimes work. Watch 앱의 info.plist WKCompanionAppBundleIdentifier가 iOS 부모/컨테이너 앱의 번들 식별자와 일치 하도록 설정 되었는지 확인 합니다 (iPhone에서 실행 되는 것으로 확인 됨).Confirm that the Watch App's Info.plist WKCompanionAppBundleIdentifier is set to match the bundle identifier of the iOS parent/container app (ie. the one that runs on the iPhone).

  • iOS 디자이너에는 개요 또는 알림 인터페이스 컨트롤러에 대 한 진입점 화살표가 표시 되지 않습니다.iOS Designer does not show entrypoint arrows for Glance or Notification interface controllers.

  • 스토리 보드에 WKNotificationControllers 두 개를 추가할 수 없습니다.You cannot add two WKNotificationControllers to a storyboard. 해결 방법: 스토리 보드 XML의 notificationCategory 요소는 항상 동일한 id로 삽입 됩니다.Workaround: The notificationCategory element in the storyboard XML is always inserted with the same id. 이 문제를 해결 하려면 둘 이상의 알림 컨트롤러를 추가 하 고, 텍스트 편집기에서 스토리 보드 파일을 열고, id 요소를 고유 하 게 변경할 수 있습니다.To work around this problem you can add two (or more) Notification Controllers, open the storyboard file in a text editor and then manually change the id element to be unique.

  • 앱을 시작 하려고 하면 "응용 프로그램이 빌드되지 않았습니다" 라는 오류가 표시 될 수 있습니다.You may see an error "The application has not been built" when trying to launch the app. 이는 시작 프로젝트가 조사식 확장 프로젝트로 설정 된 경우 정리 된 후에 발생 합니다.This occurs after a Clean when the startup project is set to the watch extension project. 해결 방법은 빌드 > 모두 다시 빌드를 선택 하 고 앱을 다시 시작 하는 것입니다.The fix is to select Build > Rebuild All and then re-launch the app.

Visual StudioVisual Studio

Watch Kit에 대 한 iOS Designer 지원에서는 솔루션을 올바르게 구성 해야 합니다.The iOS Designer support for Watch Kit requires the solution to be configured correctly. 프로젝트 참조를 설정 하지 않은 경우 ( 참조를 설정 하는 방법참조) 디자인 화면이 제대로 작동 하지 않습니다.If the project references are not set (see how to set references) then the design surface will not work correctly.

아이콘 이미지에서 알파 채널 제거Removing the Alpha Channel from Icon Images

아이콘에 알파 채널이 포함 되어서는 안 됩니다 (알파 채널에서 이미지의 투명 영역을 정의 함). 그렇지 않으면 앱 스토어를 전송 하는 동안 앱이 거부 되 고 다음과 같은 오류가 발생 합니다.Icons should not contain an alpha channel (the alpha channel defines transparent areas of an image), otherwise the app will be rejected during App Store submission with an error similar to this:

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에서 알파 채널을 쉽게 제거할 수 있습니다.It's easy to remove the alpha channel on Mac OS X using the Preview app:

  1. 미리 보기 에서 아이콘 이미지를 열고 파일 > 내보내기를 선택 합니다.Open the icon image in Preview and then choose File > Export.

  2. 알파 채널이 있는 경우 표시 되는 대화 상자에는 알파 확인란이 포함 됩니다.The dialog that appears will include an Alpha checkbox if an alpha channel is present.

  3. 알파 확인란의 선택을 취소 하 고 파일을 올바른 위치에 저장 합니다.Untick the Alpha checkbox and Save the file to the correct location.

  4. 이제 아이콘 이미지가 Apple의 유효성 검사를 통과 해야 합니다.The icon image should now pass Apple's validation checks.

수동으로 인터페이스 컨트롤러 파일 추가Manually Adding Interface Controller Files

중요

Xamarin의 WatchKit 지원에는 iOS designer에서 조사식 storyboard 디자인 (Mac용 Visual Studio 및 Visual Studio 둘 다)이 포함 되며, 아래에 설명 된 단계는 필요 하지 않습니다.Xamarin's WatchKit support includes designing watch storyboards in the iOS designer (in both Visual Studio for Mac and Visual Studio), which does not require the steps outlined below. Mac용 Visual Studio 속성 패드에서 인터페이스 컨트롤러에 클래스 이름을 지정 하기만 하면 C# 코드 파일이 자동으로 생성 됩니다.Simply give an interface controller a Class name in the Visual Studio for Mac Properties pad and the C# code files will be created automatically.

Xcode Interface Builder를 사용 하는 경우 다음 단계에 따라 watch 앱에 대 한 새 인터페이스 컨트롤러를 만들고 Xcode와 동기화를 사용 하도록 설정 하 여에서 C#콘센트 및 작업을 사용할 수 있도록 합니다.If you are using Xcode Interface Builder, follow these steps to create new interface controllers for your watch app and enable synchronization with Xcode so that the outlets and actions are available in C#:

  1. Xcode Interface Builder에서 watch 앱의 인터페이스. storyboard 를 엽니다.Open the watch app's Interface.storyboard in Xcode Interface Builder.

  2. InterfaceController를 스토리 보드로 끌어 옵니다.Drag a new InterfaceController onto the storyboard:

  3. 이제 컨트롤을 인터페이스 컨트롤러 (예:You can now drag controls onto the interface controller (eg. 레이블 및 단추)를 사용할 수 있지만,이 경우에는 .h 헤더 파일이 없기 때문에 콘센트가 나 작업을 만들 수 없습니다.labels and buttons) but you cannot create outlets or actions yet, because there is no .h header file. 다음 단계를 수행 하면 필요한 .h 헤더 파일이 생성 됩니다.The following steps will cause the required .h header file to be created.

  4. 스토리 보드를 닫고 Mac용 Visual Studio로 돌아갑니다.Close the storyboard and return to Visual Studio for Mac. Watch 앱 확장 C# 프로젝트에 새 파일 MyInterfaceController.cs (또는 원하는 이름을 원하는 대로)를 만듭니다 (storyboard가 있는 watch 앱 자체는 아님).Create a new C# file MyInterfaceController.cs (or whatever name you like) in the watch app extension project (NOT the watch app itself where the storyboard is). 네임 스페이스, classname 및 생성자 이름을 업데이트 하는 다음 코드를 추가 합니다.Add the following code (updating the namespace, classname, and the constructor name):

    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# Watch 앱 확장 프로젝트에서 다른 새 파일 MyInterfaceController.designer.cs 를 만들고 아래 코드를 추가 합니다.Create another new C# file MyInterfaceController.designer.cs in the watch app extension project and add the code below. 네임 스페이스, classname 및 Register 특성을 업데이트 해야 합니다.Be sure to update the namespace, the classname and the Register attribute:

    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 ()
            {
            }
        }
    }
    

    (선택 사항)이 파일을 Mac용 Visual Studio Solution Pad의 다른 C# 파일로 끌어서이 파일을 첫 번째 파일의 자식 노드로 만들 수 있습니다.You can (optionally) make this file a child node of the first file by dragging it onto the other C# file in the Visual Studio for Mac Solution Pad. 그러면 다음과 같이 표시 됩니다.It will then appear like this:

  6. Xcode 동기화가 사용 된 Register 특성을 통해 새 클래스를 인식할 수 있도록 빌드 > 모두 빌드 를 선택 합니다.Select Build > Build All so that Xcode synchronization will recognize the new class (via the Register attribute) that we used.

  7. Watch 앱 스토리 보드 파일을 마우스 오른쪽 단추로 클릭 하 고 > Xcode Interface Builder를 사용하 여 열기를 선택 하 여 스토리 보드를 다시 엽니다.Re-open the storyboard by right-clicking on the watch app storyboard file and selecting Open With > Xcode Interface Builder:

  8. 새 인터페이스 컨트롤러를 선택 하 고 위에서 정의한 클래스 이름 (예:)을 제공 합니다.Select your new interface controller and give it the classname you defined above, eg. MyInterfaceControllerMyInterfaceController. 모든 항목이 제대로 작동 하는 경우 클래스: 드롭다운 목록에 자동으로 표시 되며 여기에서 선택할 수 있습니다.If everything has worked correctly, it should appear automatically in the Class: drop down list and you can select it from there.

  9. 스토리 보드와 코드를 나란히 볼 수 있도록 Xcode에서 도우미 편집기 보기 (두 개의 겹치는 원이 있는 아이콘)를 선택 합니다.Choose the Assistant Editor view in Xcode (the icon with two overlapping circles) so that you can see the storyboard and the code side-by-side:

    코드 창에 포커스가 있는 경우 .h 헤더 파일을 확인 하 고 이동 경로 탐색 막대를 마우스 오른쪽 단추로 클릭 하 고 올바른 파일 (MyInterfaceController)을 선택 합니다 .When the focus is in the code pane, ensure you're look at the .h header file, and if not right-click in the breadcrumb bar and select the correct file (MyInterfaceController.h)

  10. 이제 Ctrl + storyboard에서 .h 헤더 파일로 끌어서 작업을 만들 수 있습니다.You can now create outlets and actions by Ctrl + drag from the storyboard into the .h header file.

    끌기를 해제할 때 콘센트가 나 작업을 만들지 여부를 선택 하 라는 메시지가 표시 되 면 해당 이름을 선택 합니다.When you release the drag, you'll be prompted to select whether to create an outlet or an action, and choose its name:

  11. 스토리 보드 변경을 저장 하 고 Xcode를 닫으면 Mac용 Visual Studio로 돌아갑니다.Once the storyboard changes are saved and Xcode is closed, return to Visual Studio for Mac. 헤더 파일 변경 내용을 검색 하 고 designer.cs 파일에 코드를 자동으로 추가 합니다.It will detect the header file changes and automatically add code to the .designer.cs file:

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

이제!에서 C#컨트롤을 참조 하거나 작업을 구현할 수 있습니다.You can now reference the control (or implement the action) in C#!

명령줄에서 Watch 앱 시작Launching the Watch App from the Command Line

중요

기본적으로 일반 앱 모드에서 시청 앱을 시작할 수 있으며, Mac용 Visual Studio 및 Visual Studio에서 사용자 지정 실행 매개 변수 를 사용 하 여 한눈 에 보기 또는 알림 모드를 시작할 수 있습니다.You can start the Watch App in normal app mode by default, and also in Glance or Notification modes using custom execution parameters in Visual Studio for Mac and Visual Studio.

명령줄을 사용 하 여 iOS 시뮬레이터를 제어할 수도 있습니다.You can also use the command line to control the iOS Simulator. Watch 앱을 시작 하는 데 사용 되는 명령줄 도구는 mtouch입니다.The command line tool used to launch watch apps is mtouch.

다음은 전체 예제입니다 (터미널에서 한 줄로 실행 됨).Here is a full example (executed as a single line in the terminal):

/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.The parameter you need to update to reflect your app is launchsimwatch:

--launcha watch--launchsimwatch

Watch 앱 및 확장을 포함 하는 iOS 앱에 대 한기본 앱 번들의 전체 경로입니다.The full path to the main app bundle for the iOS app that contains the watch app and extension.

참고

제공 해야 하는 경로는 iPhone 응용 프로그램 파일에 대 한 것입니다. 즉, iOS 시뮬레이터에 배포 되 고 조사식 확장과 조사식 앱을 모두 포함 하는 앱입니다.The path you need to supply is for the iPhone application .app file, i.e. the one that will be deployed to the iOS simulator and that contains both the watch extension and watch app.

예제:Example:

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

알림 모드Notification Mode

앱의 알림 모드를 테스트 하려면 watchlaunchmode 매개 변수를 Notification로 설정 하 고 테스트 알림 페이로드가 포함 된 JSON 파일에 대 한 경로를 제공 합니다.To test the app's Notification mode, set the watchlaunchmode parameter to Notification and supply a path to a JSON file that contains a test notification payload.

알림 모드에는 페이로드 매개 변수가 필요 합니다.The payload parameter is required for Notification mode.

예를 들어 다음 인수를 mtouch 명령에 추가 합니다.For example, add these arguments to the mtouch command:

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

기타 인수Other Arguments

나머지 인수는 아래에 설명 되어 있습니다.The remaining arguments are explained below:

--sdkroot--sdkroot

필수 요소.Required. Xcode에 대 한 경로를 지정 합니다 (6.2 이상).Specifies the path to Xcode (6.2 or later).

예제:Example:

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

--장치--device

실행할 시뮬레이터 장치입니다.The simulator device to execute. 이는 특정 장치의 udid를 사용 하거나 런타임 및 장치 유형의 조합을 사용 하 여 두 가지 방법으로 지정할 수 있습니다.This can be specified in two ways, either using the udid of a specific device, or using a combination of runtime and device type.

정확한 값은 컴퓨터 마다 다르며 Apple의 해당 인증서 를 사용 하 여 쿼리할 수 있습니다.The exact values varies between machines, and can be queried using Apple’s simctl tool:

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

UDIDUDID

예제:Example:

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

런타임 및 장치 유형Runtime and Device type

예제:Example:

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