HOME > AppleWatch6
先日Swiftサラリーマンに関してTwitterでつぶやいてくださっていたスマートウォッチ開発者のまっちょさん に教えていただいたAppleWatchアプリ作成に関する海外のWatchKitのナターシャさんの記事(Architecting Your App for the Apple Watch)を教えていただきました、 動画やプレゼンもあり英語でしたがサンプルコードも付いていて分かりやすかったです!
AppleWatchとiPhone間でどうやってデータ交換するかの説明がとてもタメになりましたので、 この記事でも紹介させていただきます。
最初にデータ交換において以下3つの方法があります。それぞれ説明します
参考:Architecting Your App for the Apple Watch
参考:Natasha The Robot
よしナターシャさんのサンプルを動かすぞー!と思って実行しましたが、思うように動かない、、、、
デモのサンプルなので動くはずなのに、と思いつつ調べてみますと
赤文字でgroup.com.natashatherobot.userdefault、警告マークでAdd the 'App Groups' entitlement to your App IDと不吉な文字。 どうやらTarget -> Capability -> AppGroupの設定がナターシャさんのアプリの依存している様でした。
↓
というわけで、App GroupのIDを新たに自分で取得したプロジェクトで試してみると成功しました(参考サイト:[iOS 8] App Extension #3 – App Group で containing app とデータを共有する)。
AppGroupの設定でハマったのですが、名称は正しくBundle Identifier と同じように逆ドメインに指定しないといけないようです。 つまりアプリのBundle Identifierがcom.swiftsalaryman.hogeAppだとすると、App GroupのIDは、group.com.swiftsalaryman.usedefaultの太字部分の ようにアプリとAppGroupで合わせておく必要があるようです。
App ExtensionでTodayウェジット等とデータ連携する際と同じでNSUserDefaultのsuitNameに同じ名称を指定してアクセスします。
こういった感じで赤文字にもならず警告マークも無い状態であればOKです。ちなみに上記サンプルのBundle Identifierはcom.okko.testAppleWatchです
SharingWithUserDefaultsとSharingWithUserDefaults WatchKit ExtensionのGenaralに記載されているBundle Identiferを com.natashatherobotから私が利用しているcom.okkoに書き換えると、、、、、AppGroupsの赤文字と赤マークがなくなった!Bundle Identifier変えられるんでしたね、、、失念しておりました。
でもこの状態でApple Watchを起動すると、、、SPErrorInvalidBundleNoGizmoBinaryMessageの怪しいエラー。これは Bundle Identifierを変えた場合に表示されるようでした
この記事(Apple Watchkit simulator issue: SPErrorInvalidBundleNoGizmoBinaryMessage) を見て解決!どうやらSharingWithUserDefaults WatchKit ExtensionとSharingWithUserDefaults WatchKit Appにあるinfo.plistのWKAppBundleIdentifierとWKCompanionAppBundleIdentifierを2箇所変更する必要があるようでした。(一箇所だけだと解決しないので注意)
この上記のcom.natashatherobotを書き換えると、、、、動き出しました!
NSUserdefaultでの保存部分だけ抜粋しました
▪︎↓ ソースコード(iPhone端末側)- ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let defaults = NSUserDefaults(suiteName: "group.com.okko.demoAppExtensions")
let key = "TESTKEY"
defaults?.setObject("hogehoge", forKey: key)
defaults?.synchronize()
}
}
▪↓︎ ソースコード(AppleWatch側)- InterfaceController.swift
import WatchKit
class InterfaceController: WKInterfaceController {
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
let defaults = NSUserDefaults(suiteName:"group.com.okko.demoAppExtensions")
defaults?.synchronize()
println(defaults?.stringForKey("TESTKEY"))// hogehoge
}
}
NSUserDefaultsだけで記事のボリュームがでましたのでNSFileCoordinatorとKeychain Sharingは 別記事にしてアップします!このBundle Identifer調整方法が分かったので別サンプルも動くのではと思いつつ、、、、
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|