問題タブ [ios-extensions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 拡張機能を含む iOS アプリと拡張機能 (ホスト アプリではない) の間で通信する方法
TLDR: iOS アプリとその拡張機能の間でリアルタイムのメッセージまたは通知を送信することは可能ですか?
App Group
同じ一部であり、同じ CoreData (SQLite データベース) を共有する拡張機能を使用して iOS アプリを作成しています。アプリと拡張機能から CoreData を使用してデータベースの読み取りと書き込みを行うことができます。どちらも同じコンテンツを共有します。
私の質問は次のとおりです。アプリと拡張機能の間でメッセージまたは通知を送信して、必要に応じて更新するように相手に通知することは可能ですか?
通知を送信しようとしNSNotificationCenter
ましたが、アプリ/拡張機能から「送信」されません。共有グループに書き込んNSUserDefaults
でリッスンしようとすると、同じ問題が発生しNSUserDefaultsDidChangeNotification
ます。これはアプリ内で機能しますが、拡張機能は何も受け取りません (起動され、同じを共有していることがわかっている場合NSUserDefaults
)。物事を同期させる方法はありますか?
ios - ホスト アプリと拡張機能の両方で使用される共有アプリ コンテナー内のコア データ ストア内の一意のエントリを保証するにはどうすればよいですか?
私の質問を効果的にするために、まず私が直面している正確なシナリオを考えてみましょう:
一般的な設定
- ホスト iOS 8 アプリ。
- ホスト アプリにバンドルされている 1 つ以上の iOS 8 拡張機能 (WatchKit、Share など)。
- ホスト アプリとすべての拡張機能は、共有アプリ グループ コンテナー内の同じ Core Data SQLite ストアを共有します。
- 各アプリ/拡張機能には、独自の NSPersistentStoreCoordinator と NSManagedObjectContext があります。
- 各永続ストア コーディネーターは、他のすべての永続ストアと同じ SQLite リソースをグループ コンテナー内で共有する永続ストアを使用します。
- アプリとすべての拡張機能は、共通のコードベースを使用して、インターネット上のリモート API リソースからコンテンツを同期します。
問題につながる一連のイベント
ユーザーがホスト アプリを起動します。リモート API リソースからのデータのフェッチを開始します。コア データ モデル オブジェクトは、API 応答に基づいて作成され、ホスト アプリのマネージド オブジェクト コンテキストに「アップサート」されます。各 API エンティティには、リモート API バックエンドでそれを識別する uniqueID があります。「アップサート」とは、API エンティティごとに、特定の uniqueID の既存のエントリが見つからない場合にのみ、ホスト アプリが Core Data に新しいエントリを作成することを意味します。
一方、ユーザーはホスト アプリの拡張機能の 1 つも起動します。これも、同じリモート API から何らかのフェッチを実行します。また、API 応答を解析するときに「アップサート」を実行しようとします。
問題:ホスト アプリと拡張機能の両方が同じ API エンティティのコア データ エントリを同時にアップサートしようとするとどうなりますか? これがどのように発生するかを確認するために、アップサートの一連のイベントを見てみましょう。
コア データ アップサート シーケンス:
- API 解析コードは、特定の API エンティティの uniqueID を解析します。
uniqueID
パーサーは、解析された uniqueID と等しい述語に一致するすべてのエントリに対してコア データ フェッチを実行します。- 既存のエントリが見つからない場合、パーサーはこの API エンティティの新しい Core Data エントリを挿入し、その
uniqueID
属性を解析済みの uniqueID に設定します。 - パーサーは管理オブジェクト コンテキストを保存し、新しいエントリ データを SQLite バッキング ストアにプッシュします。
問題の詳細
ホスト アプリと拡張機能が、同じ API エンティティの API 応答を同時に個別に解析しているとします。ホスト アプリと拡張機能の両方がステップ 4 を完了する前にステップ 3 に到達した場合、両方とも同じ uniqueID の新しい Core Data エントリを挿入しようとします。ステップ 4 に到達save:
し、それぞれの管理対象オブジェクト コンテキストを呼び出すと、Core Data は問題なく重複したエントリを作成します。
私の知る限り、Core Data には属性を一意としてマークする方法がありません。SQLite INSERT OR IGNORE
+UPDATE
コンボに相当する Core Data が必要です。. または、永続ストアの SQLite バッキング ストアを「ロック」する方法が必要です。これは、トラブルのレシピのように聞こえます。
iOS 8 拡張機能によって導入された、このかなり新しい問題に対する既知のアプローチはありますか?
ios - iOS のアプリ グループと iCloud
iCloud 同期についてはよく知っていますが、アプリ グループについては初めてです。この質問に対する簡単な答えがあるかもしれませんが、私はまだ見つけていません。基本的に、私はiCloudを統合したアプリを持っていますが、今日の拡張機能を追加しようとしています. 現在 Core Data をバックエンドとして使用しており、引き続き使用したいと考えています。ただし、私が読んだことから、「アプリ グループ」を定義して、データ ストアを共有の場所に移動する必要があります。( http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8およびiOS 8 拡張機能の Core Data SQL データベースへのアクセス (共有アプリとウィジェット拡張の間のデータ)) この場所が iCloud を使用して同期されているかどうかを確認できませんでした。または、iCloud を使用しているため、App Group は必要ですか? あらゆるヘルプ/提案に感謝します。
ios - iOS / OS X Today ビュー拡張機能で Crashlytics を使用するには?
現在、拡張機能は個別のプロセスとして実行されているため、すぐにクラッシュが記録されることはないと確信しています。ウィジェットで Crashlytics を個別に初期化する必要があると思います。たとえば、のviewDidLoad
メソッドでTodayViewController
。
- iOS / OS X 拡張機能内で Crashlytics を既に使用している人はいますか? もしそうなら、どのように実装しましたか?
- 拡張機能のためだけに Crashlytics で別のアプリを作成することが理にかなっているのかどうかも疑問に思っています.
ios - アクション拡張機能での KeychainItems へのアクセス
iOS アプリのアクション拡張機能を作成しています。ただし、ユーザー データの処理にはいくつかの大きな問題があります。私のアプリでは、ユーザーのユーザー名とパスワードを次のように保存しています。
アクション拡張機能からこれにアクセスするにはどうすればよいですか? 同じ識別子で取得して共有コンテナを作成しようとしましたが、うまくいきませんでした...
ios - iOS:アプリを含まない拡張機能のみでフレームワークコードを実行する方法
フレームワークは、含まれるアプリと拡張機能の間でコードを共有するための優れた方法です。
ターゲットが拡張機能ではなくアプリを含む場合にのみコードを実行したい場合や、その逆の場合があります。
TARGET_OS_EXTENSION のようなものはありますか?
ios8 - iOS 8 でドキュメントを編集するために使用できるアプリケーションを選択できますか?
今日は iOS8 のドキュメント ピッカーとドキュメント プロバイダーの拡張機能を使用していました。ドキュメント ピッカーを使用すると、さまざまなアプリのドキュメントを選択できます。ドキュメント プロバイダーは、サード パーティのストレージを操作するのに役立ちます。
現在、私が立ち往生しているシナリオが 1 つあります。つまり、私のアプリでは、Word ドキュメントと言うドキュメントがあります。ここで、Microsoft Office などの他のアプリを使用してこのドキュメントを自分のアプリで開き、このドキュメントを編集したいと考えています。編集後、アプリケーションに戻ることができるはずです。繰り返しますが、このドキュメントを表示すると、これらの変更が存在するはずです。ドキュメントを複製することなく、これを iOS 8 で実現できますか。