簡體   English   中英

iOS 應用程序在購買訂閱后啟動時崩潰但僅在發布到 AppStore 時,TestFlight 工作正常

[英]iOS app crashing on startup after purchasing a subscription but only when released to the AppStore, TestFlight works fine

我遇到了關於 inAppPurchases 的 iOS 問題。 該應用程序是在 Delphi/Firemonkey 中開發的,並且已經進行了一年多的 beta 測試(在 TestFlight 上)。

在 TestFlight 中一切正常(包括 inAppPurchase),所以我將它推送到了應用商店。 上線后,我再次測試了 inAppPurchase(訂閱費為 79 便士/月)。 該應用程序崩潰,然后無法再次打開。

卸載/重新啟動/安裝不起作用。 唯一的解決方法是將我的設備恢復出廠設置。 幸運的是,我有一個標志,它在登錄時返回以指定用戶是否“訂閱”,所以現在,我已經將它們全部設置為“訂閱 = T”,因為我不能 go 告訴我的客戶他們需要工廠重置他們的手機——那真的很不酷。

注意:這只發生在 AppStore 的 Live 版本中,從 TestFlight 安裝可以正常工作。 此外,只有在用戶嘗試訂閱/恢復他們的訂閱時才會發生這種情況。

我希望有人對 iOS/XCode 日志有更多的了解,並且可以為我指明正確的方向。 我在下面粘貼了 2 個日志,一個來自 iOS 設備,另一個來自 XCode 控制台。

如果有人可以提供有關這里發生的事情的任何信息,將不勝感激。

這是 XCode 控制台日志

https://www.dropbox.com/s/39nkcbvg0tiix44/console_log.txt?dl=0

這是來自設備的日志

{"app_name":"iFire","timestamp":"2020-06-08 14:33:11.00 +0100","app_version":"3.2","slice_uuid":"dccce1e5-fbb2-3add-bcd1-3ea85d6b81c4","adam_id":1171368453,"build_version":"3.2.4314","bundleID":"com.kernowsoftware.ifire","share_with_app_devs":0,"is_first_party":0,"bug_type":"109","os_version":"iPhone OS 13.5.1 (17F80)","incident_id":"FAD3077C-ED29-41AB-B719-B042F5D879F3","name":"iFire"}
Incident Identifier: FAD3077C-ED29-41AB-B719-B042F5D879F3
CrashReporter Key:   69ad7719238a353771aa1d858abdc45395bc026c
Hardware Model:      iPhone11,8
Process:             iFire [617]
Path:                /private/var/containers/Bundle/Application/9D0C42A8-0498-45F9-8B0F-C83F8A0DCF10/iFire.app/iFire
Identifier:          com.kernowsoftware.ifire
Version:             3.2.4314 (3.2)
AppStoreTools:       11E608a
AppVariant:          1:iPhone11,8:13
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.kernowsoftware.ifire [606]


Date/Time:           2020-06-08 14:33:11.3492 +0100
Launch Time:         2020-06-08 14:33:10.8981 +0100
OS Version:          iPhone OS 13.5.1 (17F80)
Release Type:        User
Baseband Version:    2.06.00
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000193556df0 0x193530000 + 159216
1   libsystem_pthread.dylib         0x0000000193476930 0x193474000 + 10544
2   libsystem_c.dylib               0x0000000193404ba4 0x19338e000 + 486308
3   libc++abi.dylib                 0x0000000193529f40 0x19351a000 + 65344
4   libc++abi.dylib                 0x000000019351b818 0x19351a000 + 6168
5   libc++abi.dylib                 0x00000001935293cc 0x19351a000 + 62412
6   libc++abi.dylib                 0x0000000193529368 0x19351a000 + 62312
7   libdispatch.dylib               0x0000000193410350 0x19340d000 + 13136
8   libdispatch.dylib               0x000000019341c600 0x19340d000 + 62976
9   CoreFoundation                  0x00000001936eb6b0 0x19363e000 + 710320
10  CoreFoundation                  0x00000001936e62c8 0x19363e000 + 688840
11  CoreFoundation                  0x00000001936e58f4 0x19363e000 + 686324
12  GraphicsServices                0x000000019dafc604 0x19daf9000 + 13828
13  UIKitCore                       0x00000001978b9358 0x196e4a000 + 10941272
14  iFire                           0x00000001004c74b4 0x100014000 + 4928692
15  iFire                           0x000000010057ed28 0x100014000 + 5680424
16  iFire                           0x0000000100f1e2a8 0x100014000 + 15770280
17  libdyld.dylib                   0x00000001935612dc 0x193560000 + 4828

Thread 1:
0   libsystem_pthread.dylib         0x000000019347d9c0 0x193474000 + 39360

Thread 2:
0   libsystem_pthread.dylib         0x000000019347d9c0 0x193474000 + 39360

Thread 3 name:  Dispatch queue: BSXPCCnx:com.apple.frontboard.systemappservices (BSCnx:client:com.apple.frontboard.workspace-service)
Thread 3:
0   CoreFoundation                  0x00000001937d6694 0x19363e000 + 1672852
1   CoreFoundation                  0x000000019370cb30 0x19363e000 + 846640
2   BaseBoard                       0x00000001963b24c4 0x196349000 + 431300
3   BaseBoard                       0x00000001963b0310 0x196349000 + 422672
4   BoardServices                   0x00000001986ee85c 0x1986e9000 + 22620
5   BoardServices                   0x00000001986eca58 0x1986e9000 + 14936
6   BoardServices                   0x00000001986ebb5c 0x1986e9000 + 11100
7   BoardServices                   0x00000001986f350c 0x1986e9000 + 42252
8   BoardServices                   0x0000000198709f0c 0x1986e9000 + 134924
9   BoardServices                   0x00000001986f3320 0x1986e9000 + 41760
10  BoardServices                   0x00000001987086ac 0x1986e9000 + 128684
11  libdispatch.dylib               0x000000019340eec4 0x19340d000 + 7876
12  libdispatch.dylib               0x000000019341033c 0x19340d000 + 13116
13  libdispatch.dylib               0x000000019341685c 0x19340d000 + 39004
14  libdispatch.dylib               0x00000001934172c4 0x19340d000 + 41668
15  libdispatch.dylib               0x000000019341672c 0x19340d000 + 38700
16  libdispatch.dylib               0x00000001934172c4 0x19340d000 + 41668
17  libdispatch.dylib               0x0000000193420928 0x19340d000 + 80168
18  libsystem_pthread.dylib         0x0000000193477714 0x193474000 + 14100
19  libsystem_pthread.dylib         0x000000019347d9c8 0x193474000 + 39368

Thread 4:
0   libsystem_pthread.dylib         0x000000019347d9c0 0x193474000 + 39360

Thread 5:
0   libsystem_kernel.dylib          0x0000000193534784 0x193530000 + 18308
1   libsystem_kernel.dylib          0x0000000193533ba8 0x193530000 + 15272
2   iFire                           0x000000010003c26c 0x100014000 + 164460
3   libsystem_pthread.dylib         0x00000001934758fc 0x193474000 + 6396
4   libsystem_pthread.dylib         0x000000019347d9d4 0x193474000 + 39380

Thread 6:
0   libsystem_pthread.dylib         0x000000019347d9c0 0x193474000 + 39360

Thread 7 name:  com.apple.uikit.eventfetch-thread
Thread 7:
0   libsystem_kernel.dylib          0x0000000193534784 0x193530000 + 18308
1   libsystem_kernel.dylib          0x0000000193533ba8 0x193530000 + 15272
2   CoreFoundation                  0x00000001936eb314 0x19363e000 + 709396
3   CoreFoundation                  0x00000001936e60a0 0x19363e000 + 688288
4   CoreFoundation                  0x00000001936e58f4 0x19363e000 + 686324
5   Foundation                      0x0000000193a2eb18 0x193a27000 + 31512
6   Foundation                      0x0000000193a2e9f0 0x193a27000 + 31216
7   UIKitCore                       0x000000019795f840 0x196e4a000 + 11622464
8   Foundation                      0x0000000193b68c10 0x193a27000 + 1317904
9   libsystem_pthread.dylib         0x00000001934758fc 0x193474000 + 6396
10  libsystem_pthread.dylib         0x000000019347d9d4 0x193474000 + 39380

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000000000000
    x4: 0x000000016fdea050   x5: 0x000000016fdea600   x6: 0x000000000000006e   x7: 0x0000000000000000
    x8: 0x00000000000005b9   x9: 0x183250979d74ca51  x10: 0x0000000000000001  x11: 0x0000000000000002
   x12: 0x0000000000000000  x13: 0x00000000000007fb  x14: 0x0000000000000010  x15: 0x0000000000000000
   x16: 0x0000000000000148  x17: 0x00000001d54f6808  x18: 0x0000000000000000  x19: 0x0000000000000006
   x20: 0x0000000000000407  x21: 0x0000000102f01960  x22: 0x0000000000000000  x23: 0x0000000000000000
   x24: 0x0000000002ffffff  x25: 0x0000000102f01960  x26: 0x00000000000020ff  x27: 0x0000000000000114
   x28: 0x0000000281a92900   fp: 0x000000016fdea560   lr: 0x0000000193476930
    sp: 0x000000016fdea540   pc: 0x0000000193556df0 cpsr: 0x40000000
   esr: 0x56000080  Address size fault


提前致謝! 格雷厄姆

我遇到了這個確切的問題,並發現它是 iOS 中一個公認但未記錄的缺陷,用於基於應用程序購買的訂閱。 問題是,當使用訂閱時,應用程序中的 Storekit 框架會在加載過程的早期檢查用戶帳戶,但它必須在 iAP 機制在 Firemonkey 中初始化之前發生,否則它可能會在加載時隨機崩潰您的應用程序一個排序問題。

我實施的修復是將 Firemonkey 的 iAP 源中的初始化調用推遲到稍后,如下所述:

  1. 將 FMX.InAppPurchase.pas 和 FMX.InAppPurchase.iOS.pas 復制到您的項目中,以便您可以進行以下更改。

  2. 在 FMX.InAppPurchase.pas 的初始化部分,注釋掉“RegisterInAppPurchaseService”調用。 這是發生得太早的一個。

  3. 在我的代碼中,我還將本節中的整個代碼塊包裝在嘗試中...除了吞下並記錄任何錯誤。

  4. 改為在 TCustomInAppPurchase.Create() 方法中調用 RegisterInAppPurchaseService:

    構造函數 TCustomInAppPurchase.Create(AOwner: TComponent); var IAPIntf: IInterface; 開始繼承;

    //這里調用服務注冊解決問題。 //受保護的調用以確保它只發生一次,如果不是 iAPRegistered 然后 RegisterInAppPurchaseService;

    FProductIDs:= TStringList.Create; 如果 TPlatformServices.Current.SupportsPlatformService(IFMXInAppPurchaseService, IAPIntf) 然后開始 FInAppPurchaseService:= IFMXInAppPurchaseService(IAPIntf); FInAppPurchaseService.AddComponent(Self); 結尾; 結尾;

  5. 我在 iAPRegistered 的 TCustomInAppPurchase 中添加了一個定義為 class var 的控制變量,以確保它只初始化一次。 多次調用可能會導致其他問題。

  6. 在 InAppPurchase.iOS.pas 中,在 RegisterInAppPurchaseService 中,添加一行設置 iAPRegistered:=True;

以上解決了我的崩潰問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM