
【AppSheet】薬局薬剤師が作った、一般市民向け処方箋医薬品検索アプリ〜ホワイトラベル化&Apple Storeリリースに成功〜
アプリの画面操作について
弊社はエクセルVBAで作った薬局間の地域医薬品在庫共有ツールAd0(All Dead Stock 0zero):(月額300円)をより多くの薬局様に加盟していただきたく、活動しています。昨今の医薬品不足により近隣で効率よく薬を融通し合うことは、患者様、薬局、業者さんにとってメリットがあると考えています。静岡市を中心に約50軒、他県、他地域からのオファーもいただいている状況です。
今回はApple Storeからリリースし、誰でもこのアプリを使っていただけるように一般市民向け在庫検索アプリ「お薬どこ」を開発いたしました。
麻薬、毒薬、劇薬、向精神薬、睡眠薬は検索できないようにし、薬局のプライバシーを守っています。ジェネリック医薬品のメーカーも削除し、より一般の方が検索しやすくしました。使い方を以下の画像で説明します。



検索の元になっている在庫データは、前述のエクセルソフトに加盟している薬局様が毎月出力する購入履歴に基づいているので、加盟店舗がない地域は表示されません。随時加盟店舗を増やしているところなのであなたの街でも検索が可能になるまでしばらくお待ちください。
Appleの審査が通らず苦労したこと
リジェクトの数々
まさか自分でappleに申請を行なう日が来ると思ってなかったので、appleのガイドラインなど読まずに、いきなり申請開始。たくさんのリジェクトが返ってきました。
しかも日本時間ではないので、1日1回こちらが起こしたアクションにその明け方返信が返ってくるような流れを2週間ほど繰り返しました。
いただいたリジェクトは以下のような内容でした。翻訳と勝手な解釈が入っているので違っていたらすみません。
①Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
・ユーザーの個人情報をユーザーがコントロールできるようにする
・ユーザーがアカウントベースではないアプリの機能に自由にアクセスできるように
②Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing
・アプリは、追跡に使用されるデータを収集する前に、アプリの追跡の透明性を使用してユーザーの許可を要求しません。代わりに、アプリはユーザーに追跡を許可するように要求するカスタムプロンプトを表示します。
アプリは、追跡に使用されるデータを収集する前に、AppTracking Transparency フレームワークを通じてユーザーの許可を受け取る必要があります。カスタムプロンプトで許可を要求するのは適切ではありません。
③Guideline 2.1 - Performance - App Completeness
このアプリは、App Store ユーザーに悪影響を及ぼす1つ以上のバグを示しました。
バグの説明:
具体的には、アカウントの削除を完了できませんでした。「アカウントを削除」ボタンはグレー表示でした。
添付のスクリーンショットを参照してください。
デバイスの詳細を確認する:
- デバイスタイプ:iPad Air (第5世代)
- OSバージョン:iOS 18.0
④Guideline 2.3.8 - Performance - Accurate Metadata
・2.3.8 メタデータはすべてのオーディエンスに適している必要があるため、アプリとアプリ内購入のアイコン、スクリーンショット、およびプレビューが4歳以上の年齢評価に準拠していることを確認してください。たとえば、アプリが暴力を含むゲームである場合、恐ろしい死や特定のキャラクターに向けられた銃を描かない画像を選択してください。アプリのメタデータで「子供向け」や「子供向け」などの用語の使用は、キッズカテゴリ用に予約されています。混乱を避けるために、アプリ名やアイコン(小、大、Apple Watchアプリ、代替アイコンなど)を含むメタデータが似ていることを確認してください。
・アプリ名が提出時のIPAと異なっている
Apple connectの操作(ビルドの再アップロード)もつまづいていました
上記リジェクトに対し、AppSheet側で修正してブラウザ上で更新されるものもあれば、アプリ名の不一致(名前も確定しないまま申請を始めて、進めてしまいIPA作成時と、Appleの方で入力したアプリ名が違うという凡ミスをしていました。)などはIPAの作り直しになるのですが、作り直したビルドをアップロードする方法が全然わからず、レビューへの返信でなんとかしようとして同じようなリジェクトをたくさんもらってしまいました。やっとわかったのでその方法も載せておきます。

Appleconnectの「ビルド」の現在あがっているビルドの右にカーソルを合わせると「➖」マイナスボタンが出てきます。ここを押して削除すると、アップロードできるようになり、新しいビルドを選択できるようになります。IPAを作り直した時はこの操作をします。
マイナスボタンの存在は途中で気がついたのですが、消して元に戻れなくなったらどうしようと思い、なかなか挑戦できなかったです。chatgptに聞いてもわからず、別アプリとして再申請?みたいなことをしてテストフライトから進まなくなったり。。。本当に苦労しました。わかってしまえば申請→リジェクト→必要に応じてIPA再作成→ビルド再アップロードで良いということがわかりました。
AppSheetのユーザーログインがネックに
ここには、各リジェクトにどう対処したかを書いていきます。
私たちのアプリは、患者さんの検索ワードに基づいて結果を表示するので、患者さんを区別するため、メールアドレスが必要です。そのため、初めはAppSheetのセキュリティ設定「Require user signin」をオンにしていました。その後アカウントを求めないようにというリジェクトが来てgoogleログインではなくAppleログインで対応しましたが同じリジェクトがずっと来ました。スクリーンショットも送られてきてプライバシーポリシーに飛べないと。

この画面は私たちではどうにもなりませんが、ログインして中を見てくれないことには始まりません。そこでログインなしでも個人を分けることができる方法を思いつきました。「ユーザーセッティング」でメールアドレスを登録してもらうことにしました。
「Require user signin」をオフにしてエラーだらけになったアプリの1つ1つの「=USEREMAL()」を「=USERSETTINGS(“ユーザーEmail”)」へ変更し、ログインを求めない形を実現しました。
その他リジェクトへの対応
・ユーザーのデータはユーザーがコントロールできることを求められていると感じました。AppSheetではスプレットシートにデータが貯まっていきます。いくら管理者しか見ないとか定期的に消しますと言っても厳しそうだったので、「あなたの情報」としてメインテーブルを「【gmail】=USERSETTINGS(”ユーザーEmail”)」でスライスし、そのビューを作って、削除するアクションで履歴をユーザーが削除できるようにしました。

・利用規約とプライバシーポリシーの充実。
4歳以上の年齢評価に準拠しているかと、ATTを必要としない部分をプライバシーポリシーに盛り込んで、プライバシーポリシーと利用規約のみのページを作り、そこからも自分の履歴を削除できるようにアクションボタンを設置しました。

確かにユーザーが自分の履歴を削除してくれると、データとしても軽く済みますし、言われて作り直してみてより良いものが出来上がる感覚でした。普段他のアプリの利用規約やプライバシーポリシーはあまり読んだこともなかったですが、参考にさせてもらうと、皆さんかなり詳しく書かれていて、勉強になりました。
AppSheet ホワイトラベル化の方法
ここからはまずApple申請の前に、AppSheet側でホワイトラベル化(ブランド化)をしてIPAファイルを作らなければならないのでそのやり方をChatgptの会話履歴から思い出して書いておきます。私たちはgoogle ワークスペースを契約していてAppSheetのcore版が使えているため、アプリのデプロイができます。pro版を契約とか色々な記事をみましたが、デプロイ可能な契約ならホワイトラベル化できてしまうのではないかと思っています。これから請求が来るのかもしれませんが、coreのままホワイトラベル化まで進むことができました。(ここからはMacで作業しています)

まずAppSheetのアプリ編集画面を開き、左上のロケットマークでデプロイしてください。デプロイ後、Branded Appsをクリック、Brand this Apps?のトグルをオン、For iOSを開きます。


上記全項目を埋めていきます。(chatgptからの返答を引用しています)
①Bundle ID
1. Apple Developer アカウントにサインイン
• Apple DeveloperのWebサイトにアクセスし、Apple IDでサインインします。
• サインインするには、Apple Developer Programに登録している必要があります。
2. Certificates, Identifiers & Profilesにアクセス
• サインイン後、ページ右上にあるアカウントのメニューをクリックし、「Certificates, Identifiers & Profiles」に移動します。
3. Identifiersセクションを選択
• 左側のメニューから「Identifiers」をクリックします。ここではアプリのBundle IDなどの識別子を管理します。
4. 新しいApp IDを作成
• 画面右上にある「+」ボタンをクリックして、新しい識別子(Identifier)を作成します。
• 作成する識別子の種類を選択する画面が表示されるので、「App IDs」を選択し、「Continue」をクリックします。
5. App ID Descriptionの設定
• 「Description」欄にアプリの名前を入力します。これは自分が後から識別しやすい名前なので、アプリの内容に関連したものにします(例:Pharmacy Search Appなど)。
6. Bundle IDの設定
• Explicit(明示的)なBundle IDを選択します。
• 例: com.companyname.appname形式(例えば com.aicok.pharmacysearch)
• ここで作成したBundle IDは、AppSheetのホワイトラベル化プロセスで使用する必要があるので、必ず正確に設定してください。
7. App Servicesの選択
• アプリに必要なサービスを選択します。例えば、Push NotificationsやSign In with Appleなどのサービスが必要な場合は、ここでチェックを入れます。特に使用しない場合はそのまま次へ進んで問題ありません。
8. 確認と登録
• 設定内容の確認画面が表示されるので、入力内容を確認し、問題がなければ「Register」をクリックして登録を完了します。
9. 完了
• これでBundle IDの作成が完了しました。作成したBundle IDは、AppSheetのホワイトラベル設定画面の「Bundle ID」欄に入力します。
②Short Version String
• このフィールドには、アプリのバージョン番号(例:1.0, 1.1など)を入力します。これはiOSアプリのバージョン管理に使用されます。
③Certificate Fileのアップロード
• iOSアプリを公開するには、Appleの開発者アカウントから取得した「Certificate」ファイルが必要です。この証明書は、アプリが信頼できるソースから配信されていることを確認するために使用されます。
④Certificate Password
• 証明書をエクスポートする際に設定したパスワードを入力します。
⑤AppStore Provisioning Profileのアップロード
• App Storeにアプリを提出するためのプロファイルをアップロードします。このプロファイルは、Apple Developerアカウントから作成され、特定のアプリとデバイスに対応しています。
⑥Ad-Hoc Provisioning Profileのアップロード
• テスト用に、指定したデバイスでアプリを配布するためのプロファイルをアップロードします。
これらのファイルやプロファイルはAppleのDeveloperアカウントから作成・ダウンロードする必要があり、AppSheet上でこれらを設定することで、App Storeに提出可能なホワイトラベルアプリを作成することができます。
注意事項:
• Appleの開発者アカウントが必要です(有料)
③〜⑥に関して
③、④証明書の作成
1. AppleDeveloperにアクセスし、「Certificates, Identifiers & Profiles」から「Certificates」を選択。
2. 「+」ボタンをクリックし、「Apple Distribution証明書」を作成。
• 証明書を作成したら、ダウンロードし、AppSheetで使用します。
この時、AppSheetで.cer拡張子の証明書をアップロードしようとすると、.p12ファイルをアップロードするようにエラーが出ます。以下に.p12ファイルへの変換方法も載せます。
具体的な手順(.cerから.p12の作成):
1. .cerファイルをキーチェーンアクセスに追加
• キーチェーンアクセスを開きます(Macの場合「アプリケーション」 > 「ユーティリティ」 > 「キーチェーンアクセス」)。
• 上部メニューの「ファイル」 > 「項目をインポート」を選択し、ダウンロードした**.cerファイル**を選択してインポートします。
2. 秘密鍵(Private Key)と証明書のエクスポート
• インポート後、キーチェーンアクセスの「My Certificates」セクションで、先ほどインポートした証明書を探します。
• 証明書を右クリック(またはControl + クリック)して「エクスポート」を選択します。
• エクスポート時に、.p12形式を選択します。
3. パスワードを設定
• エクスポート時にパスワードの入力を求められます。このパスワードは後でAppSheetに設定する際に使用するため、必ず覚えておくかメモしておいてください。
4. .p12ファイルをアップロード
• 作成された**.p12ファイル**をAppSheetのホワイトラベル化設定画面でアップロードします。
• その際、エクスポート時に設定したパスワードを入力します。
⑤、⑥プロビジョニングプロファイルの作成
1. 「Profiles」タブから「+」をクリックして、新しいプロビジョニングプロファイルを作成。
2. App Store用のプロビジョニングプロファイル(App StoreまたはAd Hoc)を作成し、作成したBundle IDを関連付けます。
3. プロビジョニングプロファイルをダウンロードします。
⑦、⑧、⑨は文章を入れるだけです
Location Usage Description(位置情報の使用説明)
このアプリは、ユーザーの現在地を中心に在庫のある薬局を表示するために位置情報を使用します。位置情報は、薬局の検索をより効率的に行うために使用され、他の目的には使用されません。
Camera Usage Description(カメラの使用説明)
このアプリは、処方箋の画像を撮影するためにカメラ機能を使用します。撮影された画像は、薬局での処方箋の確認や管理に使用されます。
Gallery Usage Description(ギャラリーの使用説明)
このアプリは、保存されている処方箋の画像をアップロードするために、フォトギャラリーから画像を選択する機能を使用します。選択された画像は、薬局での処方箋の確認や管理に使用されます。
⑩Firebase Notification Configuration Fileを入れるべきかどうか
• プッシュ通知が必要な場合:
• Firebaseを使用してプッシュ通知を実装したい場合は、この設定が必要です。Firebaseの開発者コンソールで生成されたGoogleService-Info.plistファイルをここでアップロードします。
→本アプリでは使用しないため、アップロード無しで進めました。

全項目入力とアップロードが終わったら、「Create a branded version of this app for iOS devices」を押します。数分から数時間後にIPAファイルのダウンロードURLがメールでも送られてくるのと、AppSheet上の画面も変わっているので、URLからIPAファイルをダウンロードします。

Ad-Hocはテスト用なのでReleaseをダウンロードしてください。
あとはAppleconnectにアップロードするのですが、よく聞くXcodeでの作業がわからず、Transporterというアプリを使いました。今回Xcodeは一度も使用していません。
アプリダウンロードはこちらから
