DUICUO

SwiftUIを使用してオープンソースのApp Storeを実装する

iOS 11以前は、App Storeのランキングは開発者にとってアプリの活動状況を示す重要な指標でした。しかし、iOS 11以降、Appleはランキング機能を軽視し、ランキングは二次的な入り口となり、ランキングへのアクセスが困難になっていました。編集者は綿密な調査を経て、アプリランキングの閲覧、検索、情報提供、アプリリリースの有効化など、強力な機能を備えたオープンソースアプリを開発しました。

I. はじめに

App Storeは常にiPhoneエコシステムの重要な一部であり続けてきました。初期のiPhone App Storeでは、利用できるアプリがまだ少なかったにもかかわらず、トップ25リストが掲載されていました。

その後のApp Storeの進化においても、トップチャートは主要なエントリーポイントであり続け、新規ユーザーはチャートからアプリをダウンロードする傾向にあります。そのため、チャートの重要性は無視できません。

2017年当時、携帯電話市場シェアは30%にも満たなかったものの、iPhoneの市場規模は既に巨大で、App Storeには220万ものアプリが掲載されていました。App Storeの表示やおすすめ機能は、日々リリースされる膨大な数のアプリに追いつくことができず、ますます多くのアプリが注目を集めようと競い合っていました。一方で、ランキング操作の問題は依然として残っており、App Storeのデザインももはや適切ではありませんでした。例えば、「アップデート」タブは機能が制限されており、アップデートが必要なアプリの一覧が表示されるだけでした。

そのため、iOS 11以降、AppleはApp Storeを再設計し、「Today」タブと「ゲーム」タブへのエントリポイントを追加し、ランキングリストは「Apps」タブの下のセカンダリエントリポイントに移動しました。Appleは編集チームのおすすめアプリを強化し、「ゲーム」タブと「Apps」タブの前に、編集部おすすめのアプリを大々的にまとめたセクションを追加しました。ランキングリストは表示されなくなりました。

iOS 15のApp Storeには、最適化された製品ページ、カスタマイズ可能な製品ページ、アプリ内イベントなど、より多くの機能が追加されました。その目的は、開発者がアクティブコンテンツを増やし、アプリのデイリーアクティブユーザー数と収益を向上させることを明確に促すことです。

ランキング機能は単なるリスト表示の域を超え、長年にわたり、ランキングは非常に安定してきました。例えば、表示されるアプリはほとんど変化がないのに対し、ランキング上位のアプリはダウンロード数が多い傾向にあります。開発者にとって、ランキングはアプリの収益、利用状況、ダウンロード数を予測するための重要な指標です。ユーザーにとって、興味深いアプリや人気のアプリを見つけることは、長年のユーザーにとって今でも習慣となっています。

そのため、編集者は、日常的な閲覧に便利な App Store リーダーボードや、情報の表示、検索、アプリのリリース状況の購読などの機能を実装することで、多くの問題点を解決したいと考えています。

II. 効果の実証

まず、iAppStore が現在提供している機能を紹介しましょう。

iAppStroe[1]はSwiftUIを使用して構築されたApple App Storeユーティリティアプリです。

iOS および iPad の人気無料アプリ、人気有料アプリ、ベストセラー チャートのほか、新作、新作無料アプリ、新作有料アプリなど、リアルタイムの Apple ランキングを提供します。

アプリの詳細なページコンテンツの照会、アプリの検索、アプリのステータスのサブスクライブなどの機能を提供します。

すべての国と地域のApple Storeをサポートしており、Apple IDを変更せずに表示できます。

2.1 ランキングリスト

まず、App Storeには、iOSとiPadの人気無料チャート、人気有料チャート、売上トップチャート、新作チャート、新作無料チャート、新作有料チャートなど、多くのチャートが用意されていますが、これらをすべて実装しました。さらに、App StoreチャートのUIをリニューアルし、アプリのカテゴリーなどの情報を追加しました。

最も重要なのは、すべての国と地域のストアを 1 つのパネルに統合し、ドロップダウン メニューを使用してリスト間をすばやく切り替えることができるようになったことです。

2.2 アプリの詳細ページ

アプリの詳細ページでは、開発者にとって最も重要なパラメータが上部に表示されます。また、App IDの記載は頻繁に求められる要件であり、アプリの説明とアップデートプランはApp Storeのインターフェースによく似ています。プレビューエリアにはiPhoneとiPad用の画像が表示されています。画像をクリックすると拡大版が表示され、ダウンロードして共有できます。

2.3 検索

検索エリアでは、キーワードを入力してあいまい検索を行うことも、アプリIDを使って詳細検索を行うこともできます。また、右上の国と地域を切り替えることで、異なる地域のアプリ検索結果を表示できます。

2.4 アプリケーションステータスサブスクリプション

このステータスサブスクリプションとはどういう意味でしょうか?アプリストアにおけるアプリのステータスを監視できるということです。例えば、アプリが新しいバージョンをリリースした場合、ストアに表示されるまでどれくらいの時間がかかるでしょうか?AppleのAPIを使えば、アプリのステータスを定期的に確認し、いつ利用可能になるかを知ることができます。また、新しいアプリが最初にリリースされた時期や、アプリをストアから削除する必要がある時期、そしていつストアから消えるかを追跡することもできます。

2.5 その他

開発者の使いやすさを考慮し、アプリリストを長押しするとアクションリストが表示され、アプリ情報をコピーしたり、App Storeの製品ページを素早く開いたりして、コンテンツに素早くアクセスできます。さらに、ダークモードにも対応しており、美しいデザインはそのままに、より美しく表示されています。アイコンを切り替えて、お好みの表示アイコンを選択することも可能です。

どのような機能を希望するかをコメント欄でお知らせください。

III. 研究活動

次に、上記の機能を実装するために必要なAPIをどのように決定したかについて説明します。徹底的なWeb検索とテストを通じて、貴重なリストを作成しました。

3.1 ランキングインターフェース

リーダーボードをクエリするための API の例

上記の内容は、Appleが公開しているドキュメントには記載されていません。しかし、Appleのウェブサイトには「Apple Services Performance Partners」[6]というページがあり、そこには「Enterprise Partner Feed Relational」[7]というサービスが掲載されています。このパートナーシップは現在非常に取得が困難なようです。そのため、affiliate.itunes.apple.com[8]などの関連ドキュメントへのリンクはアクセスできません。

上記のリンクに記載されているパラメータ タイプに関するドキュメントはないため、調査に基づいた概要を以下に示します。

リストの種類

アプリケーション分類

その他のカテゴリーについては、AppleのウェブサイトのHTMLタグを参照してください:App Store[9]

国または地域の識別子

その他のカテゴリタグについては、AppleのウェブサイトのHTMLタグを参照してください:RSS Builder[10]

インターフェースの説明

このAPIは当初200件のデータクエリを提供していましたが、2021年9月2日にAppleはAPIを調整し、App Storeアプリランキングデータの共有を1500件から200件に大幅に削減しました。現在、App Storeの全体チャート、アプリチャート、ゲームチャート、カテゴリチャートでは、上位200のアプリのデータのみを表示できます。

3.2 検索インターフェース

アプリの検索インターフェースはシンプルで、公式ドキュメントもあります。

  • iTunesストアAPI[11]
  • iTunes検索API:検索の構築[12]

インターフェースの例:

https://itunes.apple.com/search?term=斗罗大陆&country=cn&limit=200&entity=software

`term` フィールドにはキーワードが含まれ、`country` フィールドは国または地域のラベルです。これは前述のランキングインターフェースと同じです。`entity=software` は検索ソフトウェアに固定する必要があります。詳細な使用方法については公式ドキュメントを参照してください。ここでは詳しく説明しません。

3.3 アプリの詳細

ルックアップインターフェースを使用して、特定のアプリを照会することができます。詳細については、公式ドキュメント「ルックアップの例」[13]を参照してください。

インターフェースの例:

https://itunes.apple.com/cn/lookup?id=1558453472

3.4 アプリレビューの内容

特定のアプリのユーザーレビューのクエリは Apple のドキュメントには見つかりませんでしたが、上記の調査に基づくと、API の使用に大きな問題はないはずです。

インターフェースの例:

https://itunes.apple.com/cn/rss/customerreviews/id=989673964/sortBy=mostRecent/json

地域、アプリID、並べ替え条件で検索できます。ページネーションやその他の情報については、この記事の末尾にあるリンクをご覧ください。

IV. 開発アプローチ

上記の API インターフェースを使用すると、現在オープンソースとなっている SwiftUI を使用してアプリを実装できます。

  • iAppStore - GitHub[14]

このアプリはインタラクティブなコンテンツが限られたユーティリティアプリケーションなので、ここでは詳細な実践的なプロセスは説明しません。そのため、それほど複雑ではありません。もちろん、SwiftUIを使ったUIの構築は非常に高速ですが、UIの細部を調整するにはかなりの労力が必要です。例えば、SwiftUIはまだWebViewをサポートしていないため、SFSafariViewControllerを使ってブリッジされたビューはSwiftUIコンポーネントでは正しく表示されません。

  • SFSafariViewControllerをSwiftUIで使うにはどうすればいいですか? - Stack Overflow[15]

さらに、AppleのAPIには落とし穴があります。インターフェースから返されるim:id ​​とim:bundleIdフィールドにはコロンが含まれているため、存在自体が疑わしくなります。最終的に、パースマッピングの問題は、カスタムキーバリュー名を使用することで解決されました。詳細は、ソースコード内のAppRank.swift[16]クラスを参照してください。

  1. 構造体ID属性: Codable {
  2. imBundleID、imID: 文字列
  3.      
  4. // カスタムキー値名
  5. 列挙型コーディングキー: 文字列、コーディングキー {
  6. imID = "im:id"の場合 
  7. case imBundleID = "im:bundleId"  
  8. }
  9. }

結論として、個人利用のアプリを開発する場合は、ネイティブエクスペリエンスとネイティブコンポーネントのおかげでユーザーにとって非常に使いやすいSwiftUIから始めることができます。また、古いシステムをサポートする必要がない場合は、SF Symbols[17]が提供するアイコンを使用するのも非常にユーザーフレンドリーです。

V. 要約

iAppStoreは構想から実装まで半月かかりました。この期間中、インターフェースの調査とデバッグに多くの時間を費やしました。今でもオンラインでこれらのインターフェースについて質問する人がたくさんいます。多くの開発者はこれらのインターフェースの存在を知らないと思います。したがって、この記事は回答の要約と考えることができます。今後、この問題がなくなることを願っています。最後に、iAppStoreは編集者のニーズに基づいて実装された製品であるため、多くの問題が発生する可能性があります。しかし、オープンソースプロジェクトでもあります。ご興味があれば、ぜひ参加して、興味深い体験や最先端の​​体験を追加してください。ご意見やご提案をお待ちしております。コメントセクションでフィードバックをお寄せください。また、iAppStore-GitHub [18]でスターを付けて、私たちを励ましてください。ありがとうございます。

参考文献

[1] iAppStroe:

https://github.com/37iOS/iAppStore-SwiftUI

[2] RSSビルダー: https://rss.applemarketingtools.com

[3] RSS情報:

https://www.apple.com/rss/

[4] スタックオーバーフロー:

https://stackoverflow.com/questions/29997991/how-to-get-top-400-lists-from-itunes

[5] リンク:

https://www.kalman03.com/2015/05/04/tech/appstore_affiliates_resource/

[6] Appleサービスパフォーマンスパートナー:

https://affiliate.itunes.apple.com/resources/

[7] エンタープライズパートナーフィードリレーショナル:

https://affiliate.itunes.apple.com/resources/documentation/itunes-enterprise-partner-feed/

[8] affiliate.itunes.apple.com:

https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api.html

[9] App Store:

https://apps.apple.com/cn/genre/ios/id36

[10] RSSビルダー:

https://rss.applemarketingtools.com/

[11] iTunesストアAPI:

https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/

[12] iTunes検索API:

検索の構築: https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/Searching.html#//apple_ref/doc/uid/TP40017632-CH5-SW1

[13] 検索例:

https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/LookupExamples.html#//apple_ref/doc/uid/TP40017632-CH7-SW1

[14] iAppStore - GitHub:

https://github.com/37iOS/iAppStore-SwiftUI

[15] SFSafariViewControllerをSwiftUIで使うにはどうすればいいですか? - Stack Overflow:

https://stackoverflow.com/questions/56518029/how-do-i-use-sfsafariviewcontroller-with-swiftui

[16] AppRank.swift:

https://github.com/37iOS/iAppStore-SwiftUI/blob/main/iAppStore/Models/AppRank.swift

[17] SFシンボル:

https://developer.apple.com/sf-symbols/

[18] iAppStore - GitHub:

https://github.com/37iOS/iAppStore-SwiftUI