🍫cocoapods-app_group: AppGroupを用いたチーム開発補助
要約
iOS - 個人用アカウントでAppGroupを用いたチーム開発を行なう - Qiitaで書いた内容をCocoaPodsプラグインにした。
やりたいこと
問題点と解決方法は、Qiitaに書いた記事と同様のため、引用ですませる。
問題点
iOS8でアプリ間でデータを共有する仕組みとしてAppGroupが導入された。カスタムキーボードやAppleWatchアプリ等の拡張は別アプリとなるため、これらを開発をする際はAppGroupの利用が事実上必須である。 (参考: http://www.toyship.org/archives/1845)
AppGroupは開発者アカウントごとのデータであり、かつ、世界中で一意となる名前を持たねばならない。 個人(Individual)アカウントは複数人で共有できないため、同じAppGroupを使うことができない。企業(Company/Organization)アカウントならばAppGroupの共有が可能だが、取得には法人である必要がある。
そのため、法人でない団体(例: 大学サークル等)では、AppGroupの利用が難しい。
解決策
以下の方針で、開発を複数人で行なえるようにする。
- 開発者ごとにAppGroup名/Bundle Identifierを変更する。
- AppGroup名/Bundle Identifierを具体的に書く箇所を一箇所にすることで、容易に変更できるようにする。
ただし、AppStoreに提出できるのは誰か一人という制約は解決できないため、誰かが正式版のビルド係/AppStoreへの提出係となる必要がある。
インストール
gem install cocoapods-app_group
初期設定
1. Podfile への追記
Podfile
に以下のように書いて、プラグインを有効にする。
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! plugin 'cocoapods-app_group'
2. App group名の指定
app group名を指定したのち、インストールする。
pod app-group GROUP_NAME
pod install
3. AppGroupを有効にする。
各ターゲットのcapabilityからAppGroupを有効にする。 その際、名前としてgroup.$(APP_IDENTIFIER)
を用いる。
使い方
import AppGroup AppGroup.userDefaults().setInteger(42, forKey: "answer") let n = AppGroup.userDefaults().integerForKey("answer")