みずぴー日記

陽気なプログラマが世界を廻す

🍫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) を用いる。

f:id:mzp:20151103222826p:plain

使い方

import AppGroup

AppGroup.userDefaults().setInteger(42, forKey: "answer")

let n = AppGroup.userDefaults().integerForKey("answer")

それ以外のメソッドソースを見たほうが早い。