Post

Replies

Boosts

Views

Activity

Zombie CKQuerySubscription
I am converting my subscriptions to shouldBadge=NO; and adding silent notifications to implement my own badge count incrementation now that setApplicationIconBadgeNumber: doesn't work. (see [https://stackoverflow.com/questions/47542005/ckmodifybadgeoperation-is-deprecated-in-ios-11-anyone-know-an-alternative-appro] The problem is that I still have subscriptions with shouldBadge=YES; triggering. I cannot delete those subscriptions because they do not appear in a fetchAllSubscriptionsWithCompletionHandler: . I think I may have deleted the subscriptions from the Development and Production environments on the dashboard and that is why they do not appear in the fetch. But they still exist and are firing over and over again - and setting the badge. Does anyone know how to delete a subscription that can't be fetched?
1
0
328
Sep ’24
original_transaction_id changing
I am implementing IAP for an autorenewable subscription. I decode the receipt on the device. I noticed in the sandbox that the original_transaction_id is changing for each renewal. (It is always the same as the transaction_id which differs for each renewal, as it should.) Can anyone confirm that this is NOT what happens in production?A WWDC video states that the original_transaction_id for an autorenewable subscription can be used to associate different devices owned by the same user. I had always thought that the original_transaction_id would differ from device to device. Can anyone confirm that in production the original_transaction_id is the same across all devices owned by the same user for an autorenewable subscription?
1
0
1.5k
Apr ’20
GKVoiceChat not working
I am trying to implement GKVoiceChat between two iPhones (an iPhone X and an iPhone 5s) in iOS11.3.1 Xcode 9.3.1. I have the GameKit connection working fine but not the voice. Has anyone got VoiceChat working? Can anyone see anything wrong in the code here? Thanks...Here is my relevant code:#import <GameKit/GameKit.h> #include <AVFoundation/AVFoundation.h> //in a method at the beginning...... AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *error= nil; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; [audioSession setActive:YES error:&error]; if(error){ NSLog(@"audioSession: %@ %ld %@", [error domain], (long)[error code], [[error userInfo] description]); }else{ [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; if(error){ NSLog(@"audioSession1: %@ %ld %@", [error domain], (long)[error code], [[error userInfo] description]); }else{ if( [GKVoiceChat isVoIPAllowed]){ allChannel=[[GKVoiceChat alloc] init]; allChannel=[myMatch voiceChatWithName:@"allPlayers"]; if(allChannel){ allChannel.volume = 1.0; allChannel.active=YES; [self performSelector:@selector(delayedStart) withObject:nil afterDelay:6.0f];//give Game Center a chance to respond }else{ NSLog(@"no channel was oppend"); } }else{ NSLog(@"voip not allowed"); } } } -(void)delayedStart{ [allChannel start]; NSLog(@"started"); }Here are the errors I get that I don't think are relevant. They all occur before the delayed call to [allChannel start] and they are there whether or not I implement any of the GKVoiceChat code. I think they are bugs in the GKMatch system. I am ignoring them://these errors occur before the match has been found and before the code above is executed: 2018-05-17 21:05:31.006119-0400 Go[477:67899] [log] [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDDsExpected=1 2018-05-17 21:05:31.063331-0400 Go[477:67847] [log] [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (2019854734) 2018-05-17 21:05:31.065208-0400 Go[477:67847] [log] [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDD // the next line occurs when there is a call to matchmakerViewController:viewControllerDidFindMatch: and the code above is then executed 2018-05-17 21:05:35.251683-0400 Go[477:67566] [Error] Extension request cancelled with error: Error Domain=NSExtensionErrorDomain Code=-2 "Extension cancelled by host." UserInfo={NSLocalizedDescription=Extension cancelled by host.}Here are the errors I get after setting the GKVoiceChat object to start (i.e. after that 6 second delay):2018-05-17 21:05:40.766056-0400 Go[477:67566] started 2018-05-17 21:05:41.310557-0400 Go[477:67895] [log] [ERROR] openLogDump:65 failed to open /var/mobile/Library/Caches/com.apple.VideoConference/logs/20180517-210541-0757771790-CallSettings.calldump with error 1 2018-05-17 21:05:41.449639-0400 Go[477:68033] [] WiFi:[548298341.448992]: Missing com.apple.wifi.manager-access entitlement 2018-05-17 21:05:41.449986-0400 Go[477:68033] [] WiFi:[548298341.449970]: Missing com.apple.wifi.manager-access entitlement 2018-05-17 21:05:41.450418-0400 Go[477:68033] [] WiFi:[548298341.450400]: Missing com.apple.wifi.manager-access entitlement 2018-05-17 21:05:41.451010-0400 Go[477:68033] [] WiFi:[548298341.450924]: Missing com.apple.wifi.manager-access entitlement 2018-05-17 21:05:41.451625-0400 Go[477:68033] [] WiFi:[548298341.451608]: Missing com.apple.wifi.manager-access entitlement 2018-05-17 21:05:43.648429-0400 Go[477:67566] Bad response from apsd: Connection interrupted 2018-05-17 21:05:43.662956-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 } 2018-05-17 21:05:43.664051-0400 Go[477:67566] [Warning] => Retrying... (0/5) retries 2018-05-17 21:05:43.667507-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 } 2018-05-17 21:05:43.667646-0400 Go[477:67566] [Warning] => Retrying... (1/5) retries 2018-05-17 21:05:45.845023-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 } 2018-05-17 21:05:45.845205-0400 Go[477:67566] [Warning] => Retrying... (2/5) retries 2018-05-17 21:05:46.484616-0400 Go[477:67895] [log] VideoConference [ERROR] -[VideoConference inviteDataForParticipantID:callID:remoteInviteData:nonCellularCandidateTimeout:error:]:855 VideoConference: CALLID MISMATCH 0x10bb332e0 client callID 6161504380 internal callID 0 2018-05-17 21:05:46.490559-0400 Go[477:68030] [log] [ERROR] VCAudioReceiver_DiscardQueueExcess:454 AudioReceiver is NULL 2018-05-17 21:05:46.490986-0400 Go[477:68030] [log] [ERROR] VCAudioReceiver_DiscardQueueExcess:454 AudioReceiver is NULL 2018-05-17 21:05:50.246310-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 } 2018-05-17 21:05:50.246469-0400 Go[477:67566] [Warning] => Retrying... (3/5) retries 2018-05-17 21:05:52.019693-0400 Go[477:67895] [log] VCCallSession [ERROR] -[VCCallSession startConnectionWithParticipantID:callID:usingInviteData:isCaller:capabilities:idsSocket:destination:error:]_block_invoke:2215 - Reporting not available (no backends) 2018-05-17 21:05:56.819849-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 } 2018-05-17 21:05:56.820068-0400 Go[477:67566] [Warning] => Retrying... (4/5) retries
11
0
3.7k
May ’18
SKPaymentTransactionStatePurchased called rather than SKPaymentTransactionStateRestored
FYI - There appears to be a bug in the sandbox. When you do a restoreCompletedTransactions it will call updatedTransactions for each purchase that is being restored. But it will call with a transaction.transactionState equal to SKPaymentStatePurchased not SKPaymentStateRestored. After multiple calls to updatedTransactions with the wrong transaction.transactionState it will correctly call paymentQueueRestoreCompletedTransactionsFinished:
0
0
898
Dec ’20
Preventing reuse of free periods
I am looking for a way to limit the reuse of a one-time offer in an app. For example, a feature that is available for a period of time and subsequently must be purchased through an IAP. I am concerned that the 'free trial' period in a 'free' non-consumable IAP or an autorenewable subscription can be 'hacked' by creating multiple App Store accounts. (Is that concern unwarrented?) While I am concerned about multiple App Store accounts, I am not concerned about multiple Apple ID's because it is a sufficient pain to change a device's Apple ID that I can allow that 'hack'. I do not need to know who the user is - I just need a permanent identifier for the user (or the device) that records 'first use of app' by the user or by the device. (DeviceCheck requires a server and is just a bit too complicated.)1) I can't use identifierForVendor because it gets reset on app delete-and-reinstall.2) I am told I can no longer reliably use the keychain (my current solution) because in various betas and perhaps the latest iOS it gets wiped out on app deletion.3) I am told that the user's iCloud key-value can be deleted by the user through the Settings app after app deletion.A) Can I use the user's CloudKit private database as a place to store permanent information? Will it survive deletion of the app and the user removing the app from being able to access CloudKit?B) Can I use the user's userRecord in the public database in CloudKit? Will it survive deletion of the app and the user removing the app from being able to access CloudKit?C) Is there any other way to leave a permanent record on a user's device or elsewhere?
6
0
1.5k
Feb ’20
Are CloudKit records permanent
Does anyone know if the following records/files are 'permanent'? That is, are they deleted when the user deletes the app, logs out of iCloud and denys the app access to CloudKit/iCloud Drive?1) The user's iCloud key-value file for the app.2) Files in the user's CloudKit private database.3) The user's userRecord in the public database in CloudKit.4) The iCloud keychain entries for the app.
0
0
921
Feb ’20