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 开发的,现在已经处于测试阶段(在 TestFlight 上)一年多了。
TestFlight(包括 inAppPurchase)一切正常,所以我将其推送到应用商店。上线后,我再次测试了 inAppPurchase(这是 79 便士/月的订阅)。应用程序崩溃,然后无法再次打开。
Uninstalling/Rebooting/Installing 无效。唯一的解决办法是将我的设备恢复出厂设置。幸运的是,我有一个在登录时返回的标志,用于指定用户是否 "subscribed" 所以,现在,我将它们全部设置为 "subscribed=T" 因为我不能告诉我的客户他们需要将他们的手机恢复出厂设置 - 这真的很不酷。
注意:这只发生在 AppStore 的 Live 版本中,从 TestFlight 安装可以正常工作。此外,只有在用户尝试 subscribe/restore 他们的订阅后才会发生。
我希望有人对 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 框架会在加载过程的早期检查用户帐户,但它必须在 Firemonkey 中初始化 iAP 机制之前发生,否则它可能会在加载时随机崩溃你的应用程序由于排序问题。
我实施的修复是将 Firemonkey 的 iAP 源中的初始化调用推迟到稍后,如下所述:
将 FMX.InAppPurchase.pas 和 FMX.InAppPurchase.iOS.pas 复制到您的项目中,以便进行以下更改。
在 FMX.InAppPurchase.pas 的初始化部分,注释掉“RegisterInAppPurchaseService”调用。这是发生得太早的一个。
在我的代码中,我还尝试将整个代码块包含在该部分中...除了吞下并记录任何错误。
改为在 TCustomInAppPurchase.Create() 方法中调用 RegisterInAppPurchaseService:
构造函数TCustomInAppPurchase.Create(AOwner: TComponent);
变量
IAPIntf:I接口;
开始
继承;
//这里调用服务注册修复问题。
//受保护的调用以确保它只发生一次
如果没有 iAPRegistered 那么
RegisterInAppPurchaseService;
FProductIDs := TStringList.Create;
如果 TPlatformServices.Current.SupportsPlatformService(IFMXInAppPurchaseService, IAPIntf) 那么
开始
FInAppPurchaseService := IFMXInAppPurchaseService(IAPIntf);
FInAppPurchaseService.AddComponent(自我);
结尾;
结束;
我在 TCustomInAppPurchase 中为 iAPRegistered 添加了一个定义为 class var 的控制变量,以确保它只初始化一次。多次调用可能会导致其他问题。
在 InAppPurchase.iOS.pas 的 RegisterInAppPurchaseService 中,添加一行设置 iAPRegistered:=True;
以上解决了我的崩溃问题。
我遇到了关于 inAppPurchases 的 iOS 问题。该应用程序是在 Delphi/Firemonkey 开发的,现在已经处于测试阶段(在 TestFlight 上)一年多了。
TestFlight(包括 inAppPurchase)一切正常,所以我将其推送到应用商店。上线后,我再次测试了 inAppPurchase(这是 79 便士/月的订阅)。应用程序崩溃,然后无法再次打开。
Uninstalling/Rebooting/Installing 无效。唯一的解决办法是将我的设备恢复出厂设置。幸运的是,我有一个在登录时返回的标志,用于指定用户是否 "subscribed" 所以,现在,我将它们全部设置为 "subscribed=T" 因为我不能告诉我的客户他们需要将他们的手机恢复出厂设置 - 这真的很不酷。
注意:这只发生在 AppStore 的 Live 版本中,从 TestFlight 安装可以正常工作。此外,只有在用户尝试 subscribe/restore 他们的订阅后才会发生。
我希望有人对 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 框架会在加载过程的早期检查用户帐户,但它必须在 Firemonkey 中初始化 iAP 机制之前发生,否则它可能会在加载时随机崩溃你的应用程序由于排序问题。
我实施的修复是将 Firemonkey 的 iAP 源中的初始化调用推迟到稍后,如下所述:
将 FMX.InAppPurchase.pas 和 FMX.InAppPurchase.iOS.pas 复制到您的项目中,以便进行以下更改。
在 FMX.InAppPurchase.pas 的初始化部分,注释掉“RegisterInAppPurchaseService”调用。这是发生得太早的一个。
在我的代码中,我还尝试将整个代码块包含在该部分中...除了吞下并记录任何错误。
改为在 TCustomInAppPurchase.Create() 方法中调用 RegisterInAppPurchaseService:
构造函数TCustomInAppPurchase.Create(AOwner: TComponent); 变量 IAPIntf:I接口; 开始 继承;
//这里调用服务注册修复问题。 //受保护的调用以确保它只发生一次 如果没有 iAPRegistered 那么 RegisterInAppPurchaseService;
FProductIDs := TStringList.Create; 如果 TPlatformServices.Current.SupportsPlatformService(IFMXInAppPurchaseService, IAPIntf) 那么 开始 FInAppPurchaseService := IFMXInAppPurchaseService(IAPIntf); FInAppPurchaseService.AddComponent(自我); 结尾; 结束;
我在 TCustomInAppPurchase 中为 iAPRegistered 添加了一个定义为 class var 的控制变量,以确保它只初始化一次。多次调用可能会导致其他问题。
在 InAppPurchase.iOS.pas 的 RegisterInAppPurchaseService 中,添加一行设置 iAPRegistered:=True;
以上解决了我的崩溃问题。