I have a vendor provided .framework file that I created an iOS binding project for using Objective Sharpie. I can call into the library, get callbacks, pull data, mostly everything works except the library being able to access the current location. The public headers for that project are here StripeTerminal
In my C# code, I used the Xamarin.Essentials to pull the current location.
var location = await Geolocation.GetLastKnownLocationAsync();
This returns with my location both in the simulator and on a real iPhone. I can see the access is granted to my app in the Privacy-> Location Services menu.
I have the below in my info.plist file, which I have tried targeting 9.0 SDK and 12.0 SDK.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location required for accepting payments.</string>
In an example XCode project provided by the vendor, that is able to pull the location by inspecting their verbose logs. In the Xamarin app, their logs get stuck on a requestLocation and never continue past it. I even tried setting the Link option to Don't Link and the result is the same.
What is wrong with my binding project that would prevent a native framework library from being able to access the location?
The issue was a mix of how Xamarin works and iOS. I created a CLLocationManager object in my C# code and setup a listener for location changes, except it never worked. So I tried the Xamarin.Essentials package to get the current location using GetLastKnownLocationAsync and that worked every time, so it wasn't a permission issue or a simulator issue. Digging into the Xamarin.Essentials code I found the below.
NSRunLoop.Main.InvokeOnMainThread(() => manager = new CLLocationManager());
Reading more documentation, I found that the CLLocationManager can only be successfully created from an active run loop. Wrapping calls into the Stripe Terminal iOS SDK in the NSRunLoop.Main.InvokeOnMainThread allowed things to work as they were creating a CLLocationManager expecting the call to be in an active run loop without checking first, or documenting that behavior. Stripe's internal code waited on a callback, which never happened, thus hanging the SDK in a weird state.
I'm working on the iOS 10 APNs function, trying to add Notification Service Extension to an existing App, add the function of pushing an image to the App.
After the extension was added, it did receive the pushed message. But couldn't receive the image, the function(wrote in the extension) of downloading the pushed image didn't execute during debugging. I checked the content in the App package, confirmed that the extension was installed in the App, it just didn't work.
What made me confused was that: I built a new testing project with same bundle id. The testing app could receive the pushed message and show the image correctly.(please see below screen shot)
What's wrong with the existing project? I tried to find the difference between the existing project and the testing project, yet found nothing in the code, setting, environment.
Does anyone encountered this before? I have been struggling in this for a week...
reference:
WWDC 2016 APNS Guide: https://willowtreeapps.com/ideas/wwdc-2016-rich-notifications-in-ios-10
Apple notification guide:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ModifyingNotifications.html#//apple_ref/doc/uid/TP40008194-CH16-SW1
Finally this bug was fixed, please see the attached image. XCode recommends setting the architecture as automatic and I did so, then the notification service extension worked and could receive the pushed image. I don't know why this setting caused the problem, but I'm sure it works.
In my cross-platform app I save application properties in the following way:
Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();
I then retrieve them later like this:
string myVal = Application.Current.Properties["myValue"];
This works perfectly when using the Android emulator. I can close the emulator down, and when I restart it again, my app data is preserved.
However, when I deploy this app to a physical Android device, data preservation works as expected until I close the app and open it again. At this point I retrieve an empty value. It's as though the data is only saved to memory (and not to file).
Furthermore, the iOS version of the exact same app works faultlessly. When I open the app up, all previous values have been saved and I can retrieve them.
What am I doing wrong on the Android version? Is there an Android setting, permission, or option which I need to enable to have the values saved between app sessions when actually deployed to a phone?
I had a similar problem where only the debug version saved Properties. I think we're still waiting for the bug fix, and this is the workaround on Xamarin Forms bugzilla.
In short: go to .Droid project settings -> Android Options -> Linker
and enter/add "System.Runtime.Serialization" to Skip linking assemblies.
Wow! After lots of research, I have getting solution for same issue in mine. Problem is that, when i store List or DataTable in Application.Current.Properties then all properties are removed after reopen app but if i store List or DataTable as serialize, it working fine.
In VS you need to enable the option:
Preserve application data/cache on device between deploys
You can find this at Tools > Options > Xamarin > Android Settings.
I don't know if this has stopped in the latest updates of Xamarin Forms, the data is available until the application is running similar to session but persistent storage does not work.
The best api I think available for this is Akavache https://github.com/akavache/Akavache.
You can read this blog https://codemilltech.com/akavache-is-aka-awesome/.
Update
There is a bug filed in bugzilla:
https://bugzilla.xamarin.com/show_bug.cgi?id=26444
I don't remember exactly which part of this solved the issue, but when I followed the instructions to prepare the Android application for release from start to finish, the issue went away. The problem occurred when debug builds were used on an Android device.
https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/
The link details the suggested settings for the Android project when releasing to device. Following these instructions should solve the issue.
Just updated to Xcode 7.1 and getting this error.
Was able to upload fine using 7.0.1
Hmmm, well a restart of Xcode, a fresh clean, build and archive seems to have fixed it.
If you encounter this error, you have two options:
Option A - Engage in an activity that takes a minute or two. Could be any of the activities described in the other answers, like re-install XCode, renew certificates, do a new build from scratch after clearing caches. Or simply go get a coffee.
or
Option B - Do nothing at all for a little while.
Then, try again. If it doesn't work, repeat.
Just updated to Xcode 7.1 and getting this error. Was able to upload
fine using 7.0.1
same here - restart, clean build, archive and upload was successful.
Same problem here. Grabbing a cup of βοΈ worked for me.
Exporting the app as an .ipa and uploading via Application Loader 3.0 worked for me. (Restarting xcode, cleaning, and re-archiving did not.)
I first tried to upload and got the "cannot verify client"-error.
Then i did a validate, which was successfull and then again a upload which also was successfull. No restart etc. needed.
Same problem here. Clean build and deleting project caches worked.
Had the same issue and tried everything including Application Loader but still would not load into iTunes Connect. I'm running XCode 7.1.1 and OS X El Capitan.
I also have Avira (free version) installed and once I disable it, everything went through. Hope this helps someone.
Stackoverflow has been my savior and goto source for Obj C and now Swift!!
I had this problem for all night. Got π΅ βοΈπΊπΌ but didn't work.
Solved my problem only with:
Switching lan to wifi connection
Uploading App by Application Loader
Wasn't useful but i saw than in Xcode uploading start works as well after connection switching, so maybe was a connection my problem.
Clean project not work with me in XCode 7.2. But I solve the problem by export Archive and using Application Loader.
Step:
Archive you build.
In Organizer: Chose your archive.
Export "Save for iOS App Store Deployment".
Open Application Loader (Xcode -> Open Developer Tool -> Application Loader: Download it if you don't have).
Select "Deliver your App" -> Select your exported ipa.
Upload.
=> Done
I've been having this problem since Xcode 7.1 (for more than a month). I did everything I could trying to solve this: restart Xcode, clean project, clean build folder, build with a device connected, reinstall Xcode multiple times, even formatting the whole disk and starting from scratch. None of this worked.
During this time my colleague was always able to upload the very same builds to App Store without any problem.
Curiously, what solved this problem for me was disconnecting my non-Apple wireless mouse.
I found this out when I tried to submit an app from my home computer and got the same error. I disconnected the mouse dongle, tried again and it went through.
I've verified this three times both on my home (MacBook Pro 2013) and work computer (Mac Mini 2014).
This leads me to believe that during the app submission process Apple may check if your environment is purely made by Apple or not, and may block your submission based on that. This would explain the "Cannot verify client" message.
For what it's worth: I got this error when my startdisk was almost full (less than a few hundred MB left).
Cleaning up some space and re-submitting resolved this issue.
Experiencing the same problem. Tried a number of the suggestions above. Ended up using the Application Uploader instead.
Xcode > Open Developer Tools > Application Loader
From the rest of the answers it seems that a lot of different things "resolve" this issue. Here are the particulars of what solved it for me:
The iPad had to be plugged in.
The iPad had to be signed in (i.e. not locked).
After I satisfied those two conditions, it validates and uploads reliably. If either one isn't done, I am not able to validate or upload to iTunesConnect and I get the Cannot verify client (3000) error.
You can use Application Loader to upload your build and solve it!
Download Provisiononing Profiles of app on Apple Developer,
Quit and restart Xcode,
Run Provisiononing Profiles by Xcode,
Open app again,
In General -> get "fix" at Identity.
You can Archive and Upload to Apple Store
When it fails two times in a row, choosing "Validate" and after that "Upload to App Store" does the trick for me.
I tried most of the things here, but what finally did it for me was using the Application Loader instead of trying to upload my app from the Organizer.
Once I did it from the Application Loader I got an error message related to this: ITMS-90535 Unable to publish iOS app with latest Google Signin SDK, which was the real cause of the error.
I remade the app with "App Store" provisioning profile. Earlier it was "Ad-hoc" provisioning profile.
I submitted the app from "Application Loader" instead of traditional "Organizer".
Above two steps enabled me to submit the app to iTunes Connect for beta testing also.
There is always an element for surprise whenever apple releases an updated XCode.
After trying a few things, this is what worked for me:
Just before uploading your executable, validate it, you then have a modal where you get to pick your binary. On the right, there's the name of the provisioning profile used. There's an arrow next to it.
Click on the arrow which opens the finder to the location of the provisioning profile.
Delete this file.
Restart XCode
Clean
Rebuild/Archive
Upload
I am just trying to update the old version with the new one. I am using the latest version of Xcode (version 6.4) and I validate my app bundle before submitting the app.I submit it from Xcode to iTunes Connect.
After all the setup, when I clicked on the Submit for Review button I got error like below.
The app's Info.plist can't contain values for the UIRequiredDeviceCapabilities key that would prevent this app from opening on any iOS device.
I check in my project .plist file there is appear like following screenshot.
But I don't know why this error occurred during the submission of the app.
As some of the comments above state, you have two options here.
Option 1:
You delete the key from the plist entirely. Wouldn't recommend that as you want it to run only on devices with armv7
Option 2:
You can add the normal architecture of 64 to the plist. This will allow it to run on more devices, thus also getting it successfully submitted.
Lastly, you could try to use Application Loader. There's a small chance this will actually make a change, but it doesnt cot anything and is worth a try. If nothing works out, you can contact iTunes Connect at: ituesconnect#apple.com
Hope that helps, Julian
I did fixed this issue by I removed the UIRequiredDeviceCapabilities from Project Plist and then create IPA and upload it to iTunesConnect.
Then that will be submit without this error.
Maybe you must check your Build Settings. I have your same .plist and I don't have any trouble to upload to App Store.
Check this values: