iOS:MacとiOSとのファイル共用OK!

iCloud kitでMacとiOSでのファイル共用ができました。Read/Writeの双方向の確認が取れました。

あとから整理しますが、取り急ぎ、こうすればできるというパタンがわかりました。できたのは次のパタン。iCloud container IDに何を使うかが決め手でした。

  • Macで書き込む
  • iOSで読み込む
  • iOSで書き込む
  • Macで読み込む
Advertisements

iOS:一歩前進&ソースコード

iPhone 6シミュレータとiPhone5実機との間でiCloudコンテナでのファイル共有が確認できました。

まず、ソースコードはここに置きました。前にも書いた通り、[Swift3.0] iCloudに保存したテキストファイルで書き込み・読み込みがたいへん参考になりました。ありがとうございます。

現在のできばえは、次の通りです。

iPhone6シミュレータ

  • ビルドして、iPhone6シミュレータを動かす。
  • iPhone6シミュレータでwebページを読み込む。
  • 読み込んだwebページをボタン1を押してiCloudコンテナに書き込む。
  • 自分で書き込んだwebページをボタン2を押してiCloudコンテナから読み込む。
  • ファイル名を入れるボタンを押し、iCloudコンテナから正しくwebページが読み込まれているかアラートを表示する。OKが出力されれば正しい。

iPhone5実機

  • ビルドして、アプリをiPhone5実機に入れる。
  • USBケーブルを外し、すべてのアプリをターミネートする。
  • アプリをクリックして起動する。
  • iPhone6シミュレータでiCloudコンテナに書き込こんだファイルを読み込めるか、ボタン2を押し、iCloudコンテナから読み込む。
  • ファイル名を入れるボタンを押し、iCloudコンテナから正しくwebページが読み込まれているかアラートを表示する。OKが出力されれば正しい。

ここまでは意図通りに動いていることを確認できました。あとから、書き込むファイルを変えて動作確認ができれば、この評価は一通りOKということになります。また、Macから書き込んだものを読み込めれば、完全にOKとなります。しかし、現時点では、全く先が見えていません。

ここまでで引っかかった点は次のところです。

  • iPhoneシミュレータはダメ、実機でしか確認できないというブログ記事を見かけたのですが、実際はそうでなく、iCloudアクセスも問題なくできました。実機よりもシミュレータの方がビルド時間がはるかに短く使いやすいです。
  • Xcodeでシミュレータと実機を選択する箇所があることを知りました。Xcodeのビルド▶︎の右側で選択できます。
    Screenshot 2017-03-14 08.35.32
  • iTunes共有には、Info.plistにApplication supports iTunes file sharingを追加し、YESにします。現時点では、動作確認ができていません。いろいろ実装してみたのですが、ソースコードからは実装を外してあります。
    Screenshot 2017-03-14 08.37.54
  • Capabilitiesは、iCloud Documentsのみチェックが入っています。CloudKitもimportしていません。
    Screenshot 2017-03-14 08.40.48
  • URL読み込み、iCloudコンテナの読み書きを別クラスで共通メソッドとして切り出そうとしたのですが、うまくいきませんでした。実行スレッドが異なるため変数の引渡しがうまくいきませんでした。それでViewControllerに定義し直し、直接バッファに読み書きするようにしたら、変数の維持ができるようになりました。
  • これは、読み書きの出口ルーチンとして作り込んであります。しかし、ここでMesaAreaの変数を変更しても制御をiOSに戻した後、次にViewControllerで何かしようとしても、その変数の内容は維持されません。よって、この出口ルーチンで必要な処理をするという考えは実際的でありません。
  • App IDsの設定は次の通りです。
    Screenshot 2017-03-14 08.47.30

iOS:かなりきびしい

MacからiPhoneにファイルを持ってくるだけなのですが、これがなかなかうまくいきません。

iOSでそれなりに動くように何行かコードを書きました。ファイル共有がiColudコンテナを使ってうまくいかなかったからです。macOSとは、想定した以上に間引きがあり、同じにはいかないことがわかりました。

きょうは、Bluetoothを使ったAirDropでファイルを持っていく方法をためしたのですが、とても悲しいことにiPhoneではできないことがわかりました。iPod Touchは端末側からキックすればiMacとつながることがわかったのですが、iPhoneはそもそもiMacを認識しないだけでなく、端末を全く認識しません。Bluetoothがハード的に故障しているようです。

散歩を兼ねた買い物から帰ってきて、ようやく故障という結論に達しました。

あとはiTunesでの共有。アプリがiTuneファイル共有にできればと探したら、意外に簡単にできることがわかりました。plistにApplication supports iTunes file shareing を追加して、YESにすればいいです。

今から、iTunes共有したファイルの読み方を試します。正確には、どこにファイルがあり、どう読み込めばいいか調査します。

ただし、この方法を採用した場合、ファイル共有というよりか、ファイルの転送になるので、iPhoneで処理後にiMacに転送(save to)する必要があります(多分)。

iOS:iCloudに保存

できました。

まず、[Swift3.0] iCloudに保存したテキストファイルで書き込み・読み込みの通りでした。

次のようなサンプルプログラムで確認しました。

  • 非同期にwebページを読み込む。
  • 読み込んだwebページをiCloudコンテナに書き込む。
  • iCloudコンテナから書き込んだファイル(webページ)を読み込む。

このことから、作成中のiOSアプリの場合、手順的には、macOSアプリで事前にiCloudコンテナに書き込んでおく必要があることが判明しました。iOSのサンプルプログラムと同じなら10行程度です。

iOS:また一歩前進二歩後退

災難は続く。

  • メールが送信できない・・・VPNアプリのバグ。
  • IDを登録できない・・・プロバイダのミス。
  • Apple IDが先祖返り・・・Find My Macのリセット・PRAMクリア。

この二週間、毎日のようにヘルプセンターに電話するのが続きました。

しかし、めげずにiOSの開発を続けようとしています。

iPhoneを登録できることがわかりました。Xcode→Window→DevicesでUSB接続したiPhoneをデバイスとして登録しました。どう動くかは、まだ不明。

screenshot-2017-03-04-19-05-13

もうひとつは、iCloud Containersでは、iTunesのFile Sharingで設定したファイルを取り込むことになるのではないかということ。何もかも想像の域を出ません。そうだったらうれしいな、です。

screenshot-2017-03-04-19-28-13

なるほど。実機の選択は左上のバーでできます。これでiPhoneに画面が表示できるようになりました。しかし、csvファイルを読み込めていません。

screenshot-2017-03-04-20-27-33

iOS:App ID

App IDやProvisioning IDを今まで通り機械的にapp名にしたら、不具合が発生しました。

macOSとiOSで同じものができるとxCodeが混乱するので、iOSは先頭にiOSをつけiOSMesaStackMeterのような表現にしました。

これでiCloudへのアクセスの準備ができました。やれやれ。道は長い。

iCloudアクセスで参考にしようとしているブログ:

iOS: UDID

UDIDの調べ方がわからない。

結局、一番役に立ったのはこのサイトの次の記述。

iOSデバイスのUDIDは、iTunesにデバイスを接続してデバイスアイコンをクリック概要]ページのデバイスのシリアル番号をクリックすると表示されます。これを、Macなら[command+cでコピー。

Provisioning Profileを作成するときにDevicesも登録するのだろうと思い、UDIDでつまづきました。

macOSからiOSに移植しているのですが、だいぶ違いますね。全然進みません。