2

今日の拡張機能を備えた iOS アプリケーションがあります。現在、テスト (TestFlight) を行っており、約 10 台のデバイスでテストを行っています。関連付けられたウィジェットは、これらのデバイスの 1 つを除くすべてで正常に表示されます。あるデバイスでは、ウィジェットに恐ろしい「ロードできません」というメッセージが表示されます。デバイスの再起動、アプリの削除/再インストールなどを試みました。

デバイスのログを見ると、これが最初の厄介なリファレンスであることがわかりました。

container: WGMajorListViewController> Unable to load widget view controller with service (com.mycompany.MyApp.myApp-Today-Extension): Couldn\M-b\M^@\M^Yt communicate with a helper application.
container: WGMajorListViewController> No longer waiting on connection semaphore (<OS_dispatch_semaphore: 0x174c85410>)
container: WGMajorListViewController> Severed remote view controller connection
container: WGMajorListViewController> Widget disconnected unexpectedly
container: WGMajorListViewController> Aborting active life cycle sequence: <WGWidgetLifeCycleSequence: 0x175035460; sequenceID: com.mycompany.MyApp.myApp-Today-Extension.WGMajorListViewController.7/11/17, 3:13:00 PM; currentState: WGWidgetLifeCycleSequenceStateDidRequestRemoteView>
container: WGMajorListViewController> Remote view controller disconnected unexpectedly
container: WGMajorListViewController> Attempting to reconnect to remote view controller

拡張機能のコードはホスト アプリケーションを開こうとしないため、このエラーに困惑しました。おそらく、これは内部 (iOS) ヘルパー アプリケーションを指しているのでしょうか?

その最初の行の奇妙なエスケープ文字はログにあります。これらの行の後、おそらく 2 回以上再試行し、失敗します。最終的に私は見Can't request remote view controller that is blacklistedて、デバイスは再起動するまで再試行しません:

mediaserverd(CoreMedia)[27] <Notice>: -CMSessionMgr- cmsmHandleApplicationStateChange: CMSession: Client com.mycompany.MyApp.myApp-Today-Extension with pid '257' is now Terminated. Background entitlement: NO
mediaserverd(CoreMedia)[27] <Notice>: -CMSessionMgr- cmsmHandleApplicationStateChange: CMSession: Client com.mycompany.MyApp.myApp-Today-Extension with pid '259' is now Terminated. Background entitlement: NO
symptomsd(SymptomEvaluator)[121] <Notice>: 257 com.mycompany.MyApp.myApp-Today-Extension: Terminated (most elevated: Terminated)
symptomsd(SymptomEvaluator)[121] <Notice>: 259 com.mycompany.MyApp.myApp-Today-Extension: Terminated (most elevated: Terminated)
symptomsd(SymptomEvaluator)[121] <Notice>: Entry, display name com.mycompany.MyApp.myApp-Today-Extension uuid (null) pid 257 isFront 0
symptomsd(SymptomEvaluator)[121] <Notice>: Duplicate removal of display name com.mycompany.MyApp.myApp-Today-Extension
symptomsd(SymptomEvaluator)[121] <Notice>: Entry, display name com.mycompany.MyApp.myApp-Today-Extension uuid (null) pid 259 isFront 0
symptomsd(SymptomEvaluator)[121] <Notice>: Duplicate removal of display name com.mycompany.MyApp.myApp-Today-Extension
container: WGMajorListViewController> End sequence '(null)' with reason: disappearance transition
container: WGMajorListViewController> Can't end sequence as argument sequence ((null)) doesn't match active sequence ((null)), or there's no active sequence
container: WGMajorListViewController> Begin sequence with reason: appearance transition
container: WGMajorListViewController> Initiating new life cycle sequence: '<WGWidgetLifeCycleSequence: 0x17522b6e0; sequenceID: com.mycompany.MyApp.myApp-Today-Extension.WGMajorListViewController.7/11/17, 3:13:12 PM; currentState: WGWidgetLifeCycleSequenceStateQuiescent>'
container: WGMajorListViewController> Connection requested with reason: 'appearance transition'
container: WGMajorListViewController> Will request remote view controller
container: WGMajorListViewController> Can't request remote view controller that is blacklisted

拡張コード自体からのログも、実際に起動している兆候も見られません。

問題のデバイスは、iOS 10.3.2 のパブリック バージョンを実行している iPhone 7 Plus です。ウィジェットは他のすべてのデバイスで問題なく動作します。その多くは 10.3.2 でもあります。他のどれもiPhone 7 Plusではありません。ウィジェットは iPhone 7 Plus Simulator で正常に動作します。

同じデバイスで App Store バージョンのウィジェットが正常に実行されますが、そのバージョンは Xcode 7 を使用して iOS 9 に対してビルドされています。新しいバージョンは、Xcode 8.3.3 を使用してベース SDK として 10.3 を使用します。

何かご意見は?

4

2 に答える 2

3

うわー、これは奇妙なものでした。問題の原因は、悪いイメージ、またはより具体的には悪いイメージ コード (PaintCode からエクスポートされたもの) でした。このコードは、「プラス」サイズのデバイス (3 倍) でウィジェットのストーリーボードに問題を引き起こすようです。ストーリーボードが初期化されていません。

私は PaintCode を使用 (そして愛用) しており、そのイメージ コードをあらゆる場所で使用しています。すべてがベクトルであり、任意のサイズで使用できます。いい物。とにかく、ストーリーボードにドラッグされたオブジェクトに PaintCode コードを割り当てることにより、ストーリーボードで PaintCode イメージを使用できます。次に、そのオブジェクトから同じ Storyboard の UIImageView にコントロール ドラッグします。実行時には、デバイスの解像度や画像サイズに関係なく、画像は完全に描画されます。

ウィジェットのストーリーボードには 3 つの画像があり、すべて PaintCode からのものです。3 つのイメージのうちの 1 つが問題の原因でした。画像を削除した場合、すべて問題ありません。再度追加すると、ウィジェットが起動せず、「読み込みできません」と表示されます。私が知る限り、画像は複雑ではありません。Sketch で描かれたベクター アイコンです。

なぜその画像が間違っているのか理解できませんでした。私は PaintCode 設定で遊んで、いくつかの方法でエクスポートしましたが、変更はありませんでした。そこで、Sketch を使用して PDF アセットを作成し、画像には典型的なアセット カタログのものを使用しました。

コンソールを覗いてみると、振り返ってみても手がかりはまったくありません。Swift コードが開始されず、これは「プラス」サイズの問題のみだったので、ストーリーボードの問題があった可能性があると推測しました。すべての AutoLayout 制約を削除した後の直感は、破損した Storyboard ファイルです。そこで、ウィジェットのストーリーボードで再作成し、途中でテストしました。PaintCode 画像を追加し直したときに壊れました。これができたら、元の Storyboard に戻り、面倒な画像を抜き出してみると、Widget は正常に表示されました。

プロジェクトを切り詰めて、PixelCut の優秀な人々にコピーを送って、彼らが認識できるようにします。回避策がある場合は、ここに投稿します。

于 2017-07-13T13:02:11.107 に答える