メインコンテンツまでスキップ

iOS アプリへの SDK 組み込み

このセクションでは、Xcode を用いて作成したプロジェクトへの SDK 組み込み方法を説明します。

SDK 取得用トークンは、SDK 取得用トークンの作成を参照して予め用意しておいてください。

Xcode のインストール

公式ドキュメントをご参照ください。

この資料では Xcode 16 を使用して解説します。 他のバージョンを利用する場合は、画面の表示等が異なる場合がありますので、ご了承ください。

Apple Developer Program への登録

NFC に関連する機能を使用するためには、Apple Developer Program への登録が必要です。

詳しくは公式サイトをご参照ください。

プロジェクトの作成

Xcode を起動し「Create New Project...」を選択します。

Xcodeの起動画面

「App」テンプレートを選択し「Next」をクリックします。

XcodeのAppテンプレート選択画面

プロジェクトの詳細情報を設定します。この資料では、SwiftUI を使用してサンプルアプリを作成します。

Xcodeのプロジェクト詳細情報設定画面

SDK の組み込み

プロジェクトへの SDK 組み込みは、以下の 2 つの方法があります。

  • Swift Package Manager
  • CocoaPods

プロジェクトナビゲータから、プロジェクトの設定画面を開きます。

Xcodeのプロジェクトナビゲータからプロジェクト設定を開く画面

サイドバーの「PROJECT」の下にあるプロジェクト名(ここでは「Example」です)を選択し、上部のタブから「Package Dependencies」を選択し、「Packages」テーブルの下にある「+」をクリックします。

XcodeのPackage Dependencies設定画面

開いたパネルの右上にある検索欄に、パッケージのURLを入力します。 追加すべきパッケージのURLは、下記の通りです。

  • https://repo.platform.p8n.app/VerifyBaseMock/
  • https://repo.platform.p8n.app/VerifyBaseShared/
  • https://repo.platform.p8n.app/VerifyJPKIMock/
  • https://repo.platform.p8n.app/VerifyJPKIShared/

追加すべきパッケージのURLのうち1つを入力します。

XcodeのパッケージURL検索画面

認証画面が表示されるので、以下の通り情報を入力します。

Xcodeのパッケージ認証情報入力画面

SDK が正しく読み込まれたら、「Add Package」をクリックします。

XcodeのAdd Packageボタンが表示されたパッケージ追加画面

「Add To Target」でアプリターゲット(ここでは「Example」です)を選択し、「Add Package」をクリックします。

Xcodeのターゲット選択とパッケージ追加確認画面

1つパッケージが追加できたら、他の追加すべきパッケージについても同様に追加します。

プロジェクトの設定

NFC の有効化

プロジェクトナビゲータから、プロジェクトの設定画面を開きます。

Xcodeのプロジェクトナビゲータからターゲット設定を開く画面

サイドバーの「TARGETS」の下にあるアプリターゲット名(ここでは「Example」です)を選択し、上部のタブから「Signing & Capabilities」を選択します。 Team の部分をクリックし、Apple Developer Program に登録した Team を選択します。選択後、証明書がプロビジョニングされて下の「iOS」セクションのエラーが消えることを確認します。

XcodeのSigning & Capabilities設定画面

同じ画面で、右上の「+ Capability」をクリックし、「Near Field Communication Tag Reading」を選択します。

XcodeのCapability追加画面でNear Field Communicationを選択

「Near Field Communication Tag Reading」の Capability が追加されたことを確認します。

NFC Tag Reading Capabilityが追加されたXcodeの画面

タブから「Info」を選択し、下の「Custom iOS Target Properties」の「+」をクリックし、「Privacy - NFC Scan Usage Description」を追加します。 Value には、NFC を使用する理由(○○ カードの読み取り等)を記載します。

XcodeのInfoタブでNFC Scan Usage Descriptionを追加した画面

利用可能な NFC カードの設定

同様にして、「ISO18092 system codes for NFC Tag Reader Session」を追加します。 Value には、以下の値を設定します。

  • 0003 (交通系 IC カード)
  • FE00 (電子マネー)
  • 88B4 (FeliCa Lite-S)

XcodeのInfoタブでISO18092 system codesを設定した画面

ヒント

モック環境では、FeliCa カード(交通系 IC カード、Edy、WAON など)や、ISO/IEC 14443-4 Type-A カード(クレジットカードなど)をタッチすると、マイナンバーカードの挙動がシミュレートされます。

このとき、読み取りの対象となる FeliCa のシステムコードを予め指定しておく必要があります。 上記3種類のシステムコード以外のシステムコードも指定することができます。

詳しくはSDK リファレンスをご覧ください。

サンプルコードの追加

プロジェクトナビゲータから、ContentView ファイルを開きます。

XcodeのプロジェクトナビゲータでContentViewファイルを開いた画面

以下のコードで置き換えてください。

import SwiftUI
import VerifyBaseMock
import VerifyBaseShared
import VerifyJPKIMock
import VerifyJPKIShared

func run(pin: String) async throws -> String {
// JPKI APへの接続準備を行います。
let session = ReaderSession(dispatchQueue: DispatchQueue.main)

// ここに実装を追加します。

session.close()
return "not implemented"
}

struct ContentView: View {
@State private var pin = ""
@State private var result = ""
var body: some View {
VStack {
TextField("パスワード", text: $pin).textFieldStyle(.roundedBorder)
Button {
Task {
result = "カードをタッチしてください ..."
do {
result = try await run(pin: pin)
} catch {
result = "エラー: \(error.localizedDescription)"
}
}
} label: {
Text("実行").frame(maxWidth: .infinity)
}
.buttonStyle(.borderedProminent)
ScrollView(.vertical) {
Text(result)
.frame(maxWidth: .infinity, alignment: .leading)
}
.textSelection(.enabled)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.top)
}
.frame(maxHeight: .infinity, alignment: .topLeading)
.padding()
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

これ以降、ハイライトしたrun()の中身を実装していきます。

ビルド

Xcode のツールバーから、任意の iPhone シミュレータを選択し、ターゲットに設定します。

Xcodeのツールバーでビルドターゲットを選択する画面

その後、ツールバーの「▶」ボタンをクリックして、ビルドを実行します。 ビルドが完了すると、雛形のアプリが起動します。

これで SDK の組み込みは完了です 🎉


次のステップ

API リファレンスを参照して、その他の機能を確認しましょう。 ブラウザ上でモック環境へのリクエストを試すこともできます。

実際のアプリケーションでの署名検証(身元確認)は、身元確認の流れを参照してください。