Hello all, we are working on a game for iOs using Unity.We have been able to save our game data using the iCloud KVS, but when i used a tool to explore the iPhone content (iExplorer) i found the dictionary with all our values. We dont want users to tamper with the savefiles so I would like to know if there's any way of avoiding this data to be found, or if its available some kind of encryption, or simply we shuld encrypt it ourselves before saving.Thanks a lot!pistoleta
Post
Replies
Boosts
Views
Activity
My game has several SavedGames and they are retrieved succesfully using FetchSavedGames except when I run the game for first time after install, no exceptions, no errors, just shows 0 saved games.Once I'm inside the game I call the method again and shows the correct results.This call is one of the first actions the game algorythm makes, just in case has something to do.Any idea why this might happen?Thanks,pistoleta.EDIT: More people with same problem, no sollutions:https://stackoverflow.com/questions/40992442/gklocalplayer-fetchsavedgameswithcompletionhandler-returns-0-games-on-installati/60728584#60728584
iOS 14 devices are not able fetch games saved on, previous iOS versions (tested with iOS 13 and 12), no matter how much you wait or how many times you try, or even if you restart the device.
Tested more than 20 times, it simply doesn't work. It works the other way around, games saved on iOS 12 and 13 are fetched without problems among them and on iOS 14.
By the way the app container in device (iCloud settings>Storage management) appears, and even shows the size of the save file. But still, it won't fetch.
Anybody else?
I know this has been asked multiple times, but posts are really old, some links are missing and official documentation is not clear about this.
I dont understand the 40 request per second thing. At some post I've read it scales up per user, does this apply for private databases too? I simply dont get it, And how does it scale up ? Is it linear or how is the formula?
And what's exactly a request? Any operation of querying, fetching, updating or saving?
I simply can't get it because 40 requests per second seems extremely low, I mean just with a few thousands of users saving his progress (even if its just a 50K string) would end up being extremely expensive. (Overage Fee: $100 per 10 requests )
So what do you do then if you need more requests per second, you simply pay the overage?
There must be something I'm not understanding. Thats why I'm asking.
Thanks a lot
EDIT: is maybe 40 request / user ? that would make more sense
If I run the app using Xcode I have no problems.
Incident Identifier: 457D137B-4C71-4234-B00C-A7FCFB54B83E
CrashReporter Key: 8209fa6a3cb483ad2e2f83c4080e8b5156eec66d
Hardware Model: iPhone11,8
Process: city [744]
Path: /private/var/containers/Bundle/Application/BB8D479E-0C9F-4A22-ABB0-6E4371CA3CA3/city.app/city
Identifier: com.myapp.app
Version: 836 (0.97)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.myapp.app [572]
Date/Time: 2020-11-04 17:38:27.4634 +0100
Launch Time: 2020-11-04 17:38:07.3599 +0100
OS Version: iPhone OS 14.2 (18B91)
Release Type: User
Baseband Version: 3.01.01
Report Version: 104
Exception Type: EXCCRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXCCORPSENOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Termination Description: SPRINGBOARD, <RBSTerminateContext| domain:10 code:0x8BADF00D explanation:process-launch watchdog transgression:
application<com.myapp.app>:744 exhausted real (wall clock) time allowance of 20.00 seconds | ProcessVisibility: Foreground | ProcessState: Running | WatchdogEvent: process-launch | WatchdogVisibility: Foreground | WatchdogCPUStatistics: ( | "Elapsed total CPU time (seconds): 9.720 (user 9.720, system 0.000), 8% CPU", | "Elapsed application CPU time (seconds): 0.105, 0% CPU" | ) reportType:CrashLog maxTerminationResistance:Interactive>
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystemkernel.dylib 0x00000001d217bf5c _ulockwait + 8
1 libdispatch.dylib 0x00000001a4e71794 dlockwait + 56
2 libdispatch.dylib 0x00000001a4e716c0 dispatchoncewait + 124
3 UIKitCore 0x00000001a782c430 -[UIApplicationConfigurationLoader loadInitializationContext] + 152
4 UIKitCore 0x00000001a782c77c -[UIApplicationConfigurationLoader applicationInitializationContext] + 32
5 UIKitCore 0x00000001a7813394 -[UIScreenInitialDisplayConfigurationLoader initialDisplayContext] + 180
6 UIKitCore 0x00000001a7813680 +[UIScreen initialize] + 128
7 libobjc.A.dylib 0x00000001b97cdc58 CALLINGSOME+initializeMETHOD + 24
8 libobjc.A.dylib 0x00000001b97d4318 initializeNonMetaClass + 716
9 libobjc.A.dylib 0x00000001b97d5910 initializeAndMaybeRelock+ 39184 (objcclass*, objcobject*, mutextt<false>&, bool) + 280
10 libobjc.A.dylib 0x00000001b97e4498 lookUpImpOrForward + 956
11 libobjc.A.dylib 0x00000001b97ce524 objcmsgSenduncached + 68
12 UIKitCore 0x00000001a782cc80 UIGetCurrentFallbackTraitCollection + 100
13 UIKitCore 0x00000001a78299d8 +[UITraitCollection currentTraitCollectionWithFallback:markFallback:] + 176
14 UIKitCore 0x00000001a7831454 UICurrentImageTraitCollection + 28
15 UIKitCore 0x00000001a78310f4 +[UIImageConfiguration completeConfiguration:fromConfiguration:] + 164
16 UIKitCore 0x00000001a77dfad0 +[UIImage imageNamed:inBundle:withConfiguration:] + 180
17 UnityFramework 0x00000001059fbb38 +[LUTheme initialize] + 10468152 (LUTheme.m:150)
18 libobjc.A.dylib 0x00000001b97cdc58 CALLINGSOME+initializeMETHOD + 24
19 libobjc.A.dylib 0x00000001b97d4318 initializeNonMetaClass + 716
20 libobjc.A.dylib 0x00000001b97d5910 initializeAndMaybeRelock+ 39184 (objcclass*, objcobject*, mutextt<false>&, bool) + 280
21 libobjc.A.dylib 0x00000001b97e4498 lookUpImpOrForward + 956
22 libobjc.A.dylib 0x00000001b97ce524 objcmsgSenduncached + 68
23 UnityFramework 0x00000001059ddd00 +[LUConsoleLogEntry load] + 10345728 (LUConsoleLogEntry.m:44)
24 libobjc.A.dylib 0x00000001b97dd21c loadimages + 928
25 libdyld.dylib 0x00000001a4ec1840 invocation function for block in dyld3::AllImages::runInitialzersBottomUp+ 71744 (dyld3::closure::Image const*) + 224
26 libdyld.dylib 0x00000001a4eb318c dyld3::closure::Image::forEachImageToInitBefore(void + 12684 (unsigned int, bool&) blockpointer) const + 104
27 libdyld.dylib 0x00000001a4ec2344 dyld3::AllImages::loadImage+ 74564 (Diagnostics&, char const*, unsigned int, dyld3::closure::DlopenClosure const*, bool, bool, bool, bool, void const*) + 828
28 libdyld.dylib 0x00000001a4ec1e2c dyld3::AllImages::dlopen+ 73260 (Diagnostics&, char const*, bool, bool, bool, bool, bool, void const*, bool) + 904
29 libdyld.dylib 0x00000001a4ec3d14 dyld3::dlopeninternal+ 81172 (char const*, int, void*) + 372
30 libdyld.dylib 0x00000001a4eb5d44 dlopeninternal+ 23876 (char const*, int, void*) + 112
31 CoreFoundation 0x00000001a51d2124 CFBundleDlfcnLoadFramework + 140
32 CoreFoundation 0x00000001a51a1e10 _CFBundleLoadExecutableAndReturnError + 384
33 Foundation 0x00000001a64d1908 -[NSBundle loadAndReturnError:] + 336
34 city 0x0000000102533cb0 UnityFrameworkLoad() + 31920 (main.mm:12)
35 city 0x0000000102533db4 main + 32180 (main.mm:25)
36 libdyld.dylib 0x00000001a4eb16c0 start + 4
This exception triggers when the app tries to get the instance of the local database. It works well on other devices so far. I've tried 3 different devices with 3 different iOS versions (13, 14.1 and 14.2) And the one having this problem is the one with the 14.1 although I doubt this is an iOS problem.
CKErrorDomain 3 seems to show connectivity problems but the device has good internet connection, also the iCloud is enabled.
Anybody experiencing same issue?
No live logs, also no logs in historical. Anybody experiencing the same issue? We can see activity in the telemetry section but nothing appears in the logs.
Is this a bug? please someone?
Whenever I enter the CloudKit and check the logs in the development database I can see NO EVENTS at all. Neither in history or live events while I test the app.
Although I can see on telemetrics that records have been created, modified, deleted and even some conflicts have occurred.
Do I have to enable something actively to send logs? or they should be showing up by default? Is this happening to anybody else?
I tried resetting the development environment just in case but it didn't solve the problem.
Thank you very much.
I have a general question for the apple customers here... Does the Feedback assistant ever solved any problem you have reported?
Because I've filled 2 DTS and both have redirected me to this nice assistant to post the problem there... the first one maybe 1 month ago, has been completely ignored, even being an iOS 14.0 and 14.0.1 bug confirmed by several users. And seems the other one I filled is going to be ignored too.
So I'm just wondering if this is the kind of support I must expect by using apple's services.
Whenever I enter the CloudKit and check the logs in the development database I can see NO EVENTS at all. Neither in history or live events while I test the app.
Although I can see on telemetrics that records have been created, modified, deleted and even some conflicts have occurred.
I tried resetting the development environment just in case but it didn't solve the problem.
By the way seems it's happening to more users:
https://developer.apple.com/forums/thread/659851
Thank you very much.
I'm trying to do something quite simple. I want to avoid 2 devices with the same appleID to use the private database at the same time.
For this purpose I thought about using a subscription. This way whenever a device enters the game it updates a register with the deviceUID. And if another device (using the same appleID and private database) is playing, gets notification and I let him know before kicking him out of the game. (We dont want 2 devices to use the database at the same time)
Is this possible using the subscriptions? or did I misunderstood something? Because I was able to create the subscription and the code is supposedly listening to it but I dont get any notification by code when the register declared as 'suscriptionType' is modified or even deleted.
Thanks a lot.
I'm using CloudKit private database to sync the progress of my game among the different devices of a determinate user.
So far so good, works nicely.
But I don't know how to avoid this user to play the game with 2 different devices at the same time.
Ideally I would like to kick the first device out of the game when the second one enters, but not allowing the second device would also be an option.
I thought about using subscriptions but the more I read about them the more they seem oriented for push notifications so I was wondering if there's an easier way.
Also thought about creating a 'keepAlive' register which I could set the timestamp every minute or something like that to tell the second device the game is in use... but I also find it a bit messy and unnecessary...
I guess there has to be an easy way to do this that I'm missing.
Any hint?
I went through some old posts and seems this is not possible but I would like to know if there's any update:
Is it not possible to open iCloud settings from the app?
I tried with the following URI Schemes:
prefs:root=CASTLE (doesn't work)
App-Prefs:root=CASTLE (brings me to the default settings window)
Considering the iCloud settings need to be enabled to use CloudKit or GameKit and some users don't even know where are the iCloud settings I think this is quite important.
Hi, as far as I found there's not a way of hiding In App Purchases in certain countries. Actually, Apple's Guidelines suggest that is not even allowed.
But not long ago countries like Belgium and Netherlands have taken legal actions against studios that offer this kind of In App Purchases so... Whats the solution?
Completely remove any type of loot boxing from our game?
Remove the game from those countries App Store ? (I dont know if this is even possible, I guess it is)
Find the location of the player programmatically and show/hide IAP's (not very reliable)
I'm surprised I couldn't find more debate about this since tons of games offer this kind of purchase.
Thanks in advance!
I'm receiving exceptions and user reports from devices that don't belong to my testers.
One of them even has the Chinese language set in it. Another thing is they dont seem to have any iCloud account set up so it makes me think its an emulator of some type.
Is it possible these reports are coming from any TestFlight bot or tester ? Or should I start to worry of who's having access to my app?
Thanks