コンテンツにスキップ

iOS クイックスタート

数分で、あなたの iOS アプリは本物のフィーチャーフラグを読むようになります。キャッシュ、オフラインフォールバック、デバイス ID はすべて面倒を見てもらえます。

iOS 17、macOS 14、または visionOS 1 が必要です。SDK 自体に依存関係はありません。

SDK は GitHub の公開リポジトリにあります。そこから直接 Swift Package として追加してください。Xcode(File → Add Package Dependencies…)か Package.swift で。

.package(url: "https://github.com/FortressFlag/FortressFlag_SDK_ios.git", from: "1.0.0")

起動時に 1 回。SwiftUI なら、App の init が自然な場所です。

import FortressFlag
FortressFlag.start(
Configuration(
sdkKey: "ffc_prod_…", // プロジェクトの SDK キー画面から
environment: .production,
keychainAccessGroup: "com.acme.fortressflag" // 出荷するすべてのアプリで同じ文字列
)
)

start はキャッシュされた値が読み込まれ次第戻り、SDK はそれ以降バックグラウンドで変更をポーリングします。このキーはクライアントキーで、設計上アプリの中に入って出荷されます。

どこでも。SwiftUI の body の中でも。

if FortressFlag.isEnabled("new-checkout") {
NewCheckoutView()
} else {
LegacyCheckoutView()
}

string と number の flag も同じように読めます。FortressFlag.stringValue("checkout-cta", default: "buy-now") のように。そして FortressFlag.onChange で変更を監視できます。

これで完了です。flag は公開されています。ダッシュボードで切り替えれば、アプリは次のポーリングで追従します。

FortressFlag が落ちても、あなたのアプリは落ちない

Section titled “FortressFlag が落ちても、あなたのアプリは落ちない”

この API のどの呼び出しも、例外を投げず、ブロックせず、アプリをクラッシュさせることができません。すべての読み取りはカスケードを通じて解決されます。最後に受け取った値、次に前回の実行からの永続キャッシュ、次に呼び出し箇所のデフォルト。だから障害も、死んだネットワークも、失効したキーも、ユーザーには決して届きません。

キーチェーン共有を設定する。しないとお金がかかる

Section titled “キーチェーン共有を設定する。しないとお金がかかる”

FortressFlag はアプリ単位ではなくデバイス単位で課金します。あなたのアプリを 3 つ動かしている 1 台のスマートフォンは 1 席です。ただし、3 つすべてが 1 つのデバイス ID について合意している場合に限ります。iOS では、それは共有キーチェーンアクセスグループを意味します。

  1. 各アプリターゲットで、Signing & Capabilities → + Capability → Keychain Sharing。
  2. すべてのアプリに同じグループを追加します。たとえば com.acme.fortressflag。
  3. その文字列を(チームプレフィックスなしで)keychainAccessGroup として渡します。

これを省いてもすべて動きますが、各アプリが独自の ID を保存します。1 台のデバイスが 3 台の課金対象デバイスとして数えられます。そうなっているとき、SDK は一度警告をログに出します。

プラットフォームの注記を 1 つ。ID はキーチェーンに保存されるので、iOS ではアプリのアンインストール後も残ります。そして iCloud に同期されることはないので、バックアップに乗って 2 台目のデバイスに渡ることもありません。

パッケージには 2 つ目のライブラリ FortressFlagDebugUI が同梱され、FlagListView が入っています。このデバイスが保持するすべての flag、その値、そしてそれがどこから来たかをライブで表示する SwiftUI 画面です。「SDK はそもそもサーバーと話せているのか?」へのいちばん速い答えです。