애플워치 입문

11427 단어
이 글은 사실 8월에 이미 썼는데 줄곧 발표되지 않았다. 그 동안 몇몇 친구들이 나에게 애플워치에 관한 문제를 물었다.저도 이 글의md를 그들에게 보냈습니다. 이제 이 글을 발표하여 애플워치 개발에 대해 더 알고 싶은 친구들이 간단한 입문을 할 수 있도록 하겠습니다.
추천
야옹신 애플워치키트 초심자
야옹신 WWDC15 세션 노트 - 간단한 워치OS 2 앱 30분 개발
애플워치와 iOS 앱 간 통신 & 애플워치 사용자 정의 셀
Kiss 애플워치 개발 대열
애플워치가 3개월 동안 개발한 수확의 총결산
Apple Watch 응용 최적화에 대한 몇 가지 소감 요약
Apple Watch의 Application 설계 방법
Apple Watch 오디오 녹음wav 변환.mp3, 오디오 파일 가져오기 시간
Apple Watch 개발 과정에서 발생한 문제점(WatchOS 2)
애플워치 인터랙티브 가이드 (번역)
WatchKit에서 개발한 블로그
애플워치 개발 요약
watchKit 관련 프로그래밍 문제
애플워치 개발 가이드
프로비저닝
Glance와 Notification은 자체 수동 구성이 필요하며 Scheme을 편집하면 됩니다.
라이프 사이클
인터페이스 초기화 호출 순서(OneController, TwoController)
push
modal
OneController init
OneController init
OneController awakeWithContext:
OneController awakeWithContext:
OneController willActivate
OneController willActivate
OneController didAppear
OneController didAppear
이벤트 클릭 후...
push
modal
OneController willDisappear
TwoController init
TwoController init
TwoController awakeWithContext:
TwoController awakeWithContext:
OneController willDisappear
TwoController willActivate
TwoController willActivate
OneController didDeactivate
TwoController didAppear
TwoController didAppear
OneController didDeactivate
이벤트로 돌아가면...
pop
dismiss
TwoController willDisappear
TwoController willDisappear
OneController willActivate
OneController willActivate:
TwoController didDeactivate
OneController didAppear
OneController didAppear
TwoController didDeactivate
생명주기 총결산: (야옹신의 블로그로 발췌)
모든 WKinterfaceController 대상이 반드시 호출되는 생명주기 방법은 세 가지가 있는데 그것이 바로 이 대상이 초기화될 때의 -initWithContext:, 나타날 때의 -willActivate, 그리고 나타날 후의 -didDeactivate이다. 마찬가지로 UIViewController와 비교하면 각각 -viewDidLoad에 대응하는 것으로 이해할 수 있다.viewWillAppear:-viewDidDisappear: 우리는 보통-initWith Context:와-willActivate에서'보기 요소'의 속성을 설정하고 -didDeactivate에서 NSTimer와 같은 self의 대상을 사용하지 않습니다.특히 주의해야 할 것은 -didDeactivate에서 '보기 요소' 속성을 설정하는 것은 무효입니다. 현재 WKinterfaceController가 비활성화되어 있기 때문입니다.
인터페이스 컨트롤 레이아웃 정보
놀아줄게-애플워치 개발2:인터페이스 레이아웃 놀아줄게-애플워치 개발4:Table 보기
하나의 컨트롤은 action tableView의 클릭 이벤트에만 대응할 수 있습니다.cell에 줄을 당기지 않도록 주의하십시오
#pragma mark - Table Row Select
-(void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex
{
    NSLog(@"did select rowIndex = %i",rowIndex);
    /**       (    ) */
    NSDictionary *contextDic = @{@"PicName":@"picture",@"index":[NSNumber numberWithInteger:rowIndex]};
//    [self presentControllerWithName:@"detail" context:contextDic];
    [self pushControllerWithName:@"detail" context:contextDic];
}

MenuController
애플워치만의 아이폰 같은 3DTOuch도 중력 감응에 따라 메뉴를 팝업한다
놀아줄게. - 애플워치 개발5: Menu 메뉴.
테스트를 통해 최대 4개만 추가할 수 있으며, 몇 개를 추가하든지 상관없이 앞의 4개만 표시될 수 있다.
탐색 방법(계층, 페이지 분할)
push나 Modal 다음에 돌아오면 되돌아오는 화살표가 하나밖에 없어요.
주의점
Watch에 대한 개발은 코드를 사용할 수 없는 방식입니다.우선, 모든 WKinterfaceObject 대상은 반드시 디자인해야 할 때Story Board를 통해 추가해야 하며, 실행할 때 우리는 인터페이스에 요소를 추가하거나 제거할 수 없습니다(필요한 것이 있으면 숨김을 사용할 수 있습니다).그 다음으로 WKINterfaceObject와 레이아웃과 관련된 일부 속성, 예를 들어 줄 높이와 줄 수 등은 실행할 때 변경하고 설정할 수 없습니다.기본적으로 실행할 때 우리는 보기의 내용만 바꿀 수 있고, 일부 보기 요소를 숨겨서 레이아웃을 제한적으로 바꿀 수 있다. (다른 보기 요소는 숨겨진 요소를 채우려고 시도할 것이다.)
컨트롤러 점프
- (void)pushControllerWithName:(NSString *)name context:(nullable id)context;

- (void)presentControllerWithName:(NSString *)name context:(nullable id)context;
/** present     ,  next Page */
- (void)presentControllerWithNames:(NSArray *)names contexts:(nullableNSArray*)contexts;

컨트롤러 간 전송 값
정방향 전송 값
- (void)pushControllerWithName:(NSString *)name context:(nullable id)context;
- (void)presentControllerWithName:(NSString *)name context:(nullable id)context;
- (void)presentControllerWithNames:(NSArray *)names contexts:(nullableNSArray*)contexts;

위의 세 가지 방법 중 끝에 모두 context: 파라미터가 있는데 이 파라미터는 우리가 컨트롤러를 돌릴 때 값을 전달하는 데 사용하는데 이것은 iOS단보다 훨씬 편리하다.
Segue 전송 값
//tableView
- (NSArray *)contextsForSegueWithIdentifier:(NSString *)segueIdentifier inTable:(WKInterfaceTable *)table rowIndex:(NSInteger)rowIndex {
    return nil;//    
}

- (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier {
    return nil;//    
}

- (NSArray *)contextsForSegueWithIdentifier:(NSString *)segueIdentifier {
    return nil;//    
}
//tableView
- (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier inTable:(WKInterfaceTable *)table rowIndex:(NSInteger)rowIndex {
    return nil;//    
}

데이터 수신
컨트롤러의 awakeWithContext: 방법으로 데이터 수신
- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];
    NSLog(@"receive = %@",context);
    
    // Configure interface objects here.
}

멀티미디어
공식 프로그래밍 문서
MP3/MP4 재생
    //.mp3 or .mp4
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Jennifer Lopez - Feel the Light" withExtension:@".mp3"];
    NSDictionary *options = @{WKMediaPlayerControllerOptionsAutoplayKey:@YES};
    [self presentMediaPlayerControllerWithURL:url options:options completion:^(BOOL didPlayToEnd, NSTimeInterval endTime, NSError * _Nullable error) {
        if (error) {
            NSLog(@"error = %@",error);
            return ;
        }
        NSLog(@"endTime = %f",endTime);
    }];

오디오 레코딩
Apple watch에는 자체 녹음 컨트롤러가 있는데, 우리는 설정만 하면 된다..wav, .mp4, and .m4a 형식 지원
 NSDictionary *recorderOptions = @{
                                      /**          */
                                    WKAudioRecorderControllerOptionsActionTitleKey:@"  ",
                                    /**        */
                                    WKAudioRecorderControllerOptionsAutorecordKey:@YES,
                                    /**    NSTimeInterval */
                                    WKAudioRecorderControllerOptionsMaximumDurationKey:@30
                                    };
    
    [self presentAudioRecorderControllerWithOutputURL:_recorderUrl preset:WKAudioRecorderPresetHighQualityAudio options:recorderOptions completion:^(BOOL didSave, NSError * _Nullable error) {
        NSLog(@"didSave = %@",didSave?@"YES":@"NO");
        if (error) {
            NSLog(@"error = %@",error);
        }
    }];


참고 사항:
OutputURL 샌드박스 URL이 아닌 App Groups의 URL입니다.시뮬레이터에 샌드박스 경로를 사용하면 녹화 재생에 문제가 없다.하지만 시계를 사용하면 녹음하자마자 이 컨트롤러가 디스미스로 떨어진다.
App Groups 경로
/** Identifier   App Groups    */
NSURL *url =  [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.LaiYoung.NextPage1111"];
NSURL *fileUrl = [url URLByAppendingPathComponent:@"record.wav"];

관련 기사 Apple Watch 오디오 녹음wav 변환.mp3, 오디오 파일 가져오기 시간
Glance 인터페이스(인터랙티브 응답 없이 어디를 클릭해도 어플리케이션 내부로 이동)
이것은 비슷한 소개로 시작하여 선택하지 않았다. 어떻게 Glance을 추가하고storyboard에서 Glance Interface Controller을 드래그한 다음에 Scheme을 추가하여 ClanceXXX으로 명명하고, Edit Scheme...1010Executable을 선택하여 XXX Watch App.app을 선택하고, Watch Interface는 대응하는 Glance,close를 선택하면 된다.
UI:Glance는 모두 특정한 모델을 바탕으로 한 것으로 애플은 화면의 윗부분과 밑부분의 디자인을 포함한 일련의 모델을 제공했다.Glance Interface Controller Scene의 네 번째 선택기 선택.UI 인터페이스에는 Button,Switch과 같은 이벤트 조작성 컨트롤을 추가할 수 없지만 Label,Image과 같은 컨트롤을 추가할 수 있습니다.tablemap을 사용하지 마십시오.
Notifications
애플워치의 알림은 short lookslong looks shortlooks 두 가지가 있다. 짧은 버전은 위의 그림에서 볼 때 내용이 매우 간단하다. 앱의 icon, 앱의 이름, 메시지다.및Glance의 UI 인터페이스와 마찬가지로 작동 제어는 추가할 수 없습니다.어떤 것을 추가할 수 있고 어떤 것을 추가할 수 없는지에 대해 가장 직접적인 방법은 컨트롤을Static Notification interface controller 또는Dynamic Notification interface controller이 틀리지 않은 것은 이 컨트롤을 추가할 수 있다는 것을 설명한다.
longlooks: 긴 버전, 긴 버전은 짧은 버전에 비해 많은 것들이 있다. 위의 그림을 보면 UI는 스크롤할 수 있는 세 부분으로 나뉘는데 각각 sash10content101010actionssash: 응용 프로그램의 이름과 icon을 포함합니다. 이 부분의 기본 색은 투명합니다. 사용자 정의 색(색 수정, Static Notification interface controller의 입구 선택, 네 번째 선택기 선택) content: 이 부분은 푸시된 상세한 내용입니다 action: 조작 단추 (최대 4개 추가 가능), 그리고 Dismiss , 시뮬레이션 long looksApple watch 앱을 만들거나 기존 프로젝트에 target을 추가할 때 기본적으로 Notification Scene을 선택합니다. 그리고 우리의 Notification InterfaceController은 위의 모습입니다. storyboard와 조금 다를 수 있습니다. 위의 그림은 제가 공식 문서에서 찾았는데 아직 공식적으로 변경되지 않았을 수도 있습니다.뜻만 알면 되는데..Static interface은 필수이고 dynamic interface은 옵션입니다.메시지를 전송할 때 기본적으로 선택된dynamic 인터페이스입니다. dynamic interface이 사용할 수 없고 충분한 전력이 없어서 동적 인터페이스를 표시하고 동적 인터페이스를 사용할 수 없다고 명확하게 지적할 때만 Static interface을 표시합니다
사용자 정의 인터페이스의 클래스 구성(Category)
공식 문서 Notifications
관련 기사 Notifications 개요
감사 정보:
Watch App 심사에 관해서 만약에 당신이 어떤 기능을 선택했지만 실현되지 않았다면 반드시 거절당할 것입니다. 여러분, 이 점을 주의하세요. 바로 거기로 갑니다.
구덩이:
  • 은 코드 설정을 사용하여 이미지 애플워치와 아이폰 개발이 다르기 때문에 이미지 사이즈 요구도 다르다. 애플워치의 Assets.xcassets을 찾아 이미지를 선택한 후 세 번째 선택기인 Devices을 클릭하여 워치OS를 선택하면 2x/38 mm 2x/42 mm 2x에 대한 이미지가 없어 코드 설정이 나오지 않는다.
  • watchOS 2.0은 더 이상 App Groups을 지원하지 않습니다. watchOS 2.0은 WCSession을 사용하여 통신할 수 있습니다. WCSession은 구체적으로 어떻게 사용하느냐에 따라 Apple Watch와 iOS Appl 간의 통신 & Apple Watch 사용자 정의 Cell
  • 을 볼 수 있습니다.
    Error
    Apple watch의 Bundle versions string,shortBundle version 모두 iOS와 일치해야 합니다. 그렇지 않으면build fail
    잔재주
  • 수정 controller title 색상 수정할 컨트롤러 선택, 오른쪽 선택기, 첫 번째 선택기 아래 Global Tint
  • 네트워크 요청NSURLConnection send... 방법을 사용하지 말고 NSURLSession 방법을 사용해야 한다

    좋은 웹페이지 즐겨찾기