React Native: how to make patch versions match on iOS/Android? - ios

I'm on version 4.4.33.3 of my React Native app. In XCode this works fine:
but for Android, if I make the versionCode 3 if prevents me from uploading to Google Play because I've already uploaded one with versionCode 3. It makes me increment the versionCode every time. So right now I'm forced to use 7 or above, but when users download this Android build it shows 4.4.33.7. Is there a way to avoid this mismatch between versions in iOS vs Android?

Related

iOS app compiles but crashes on launch when using unsupported 3rd party SDK

I have recently dropped the support of iOS 9 in one of my SDKs and set the minimum target version to iOS 10. This has caused some of the users of my SDK who updated to the latest version of SDK to face an unusual crash in their apps as they are still supporting iOS 9.
My SDK is a dynamically linked library, and the app running on iOS 9 devices crashes even before main() is called. I have tried setting the library to be optional in the build phases, but that doesn't stop linking the library at run time. I can't seem to capture the point where the library is linked and somehow make an exception for the unsupported iOS versions.
Is there anyway to avoid this crash on the lower versioned devices right within the SDK? Or this can only be handled from the app integrators end?
Any help or pointers would be highly appreciated!

iOS SDK 11 error when using PhoneGap Build

When submitting an app to the app store I get the following error from Apple:
The app previews and screenshots for the iPhone 5.8-Inch display won’t appear on the App Store because your binary wasn’t built with the iOS 11 SDK.
It's a normal app compiled with PhoneGap Build. Anyone know why this is happening? Is it because PhoneGap Build does not use iOS 11?
PhoneGap Build does support iOS 11 (I just had an app approved a week ago). I'm not sure exactly what would cause this, but here's a few things to check that I recently updated to:
Use the latest version of PG Build, which will support iOS 11 (my best guess for the cause of your issue):
< preference name="phonegap-version" value="cli-7.0.1" />
If that doesn't fix it, switch over to the CLI project structure format.

Continuing support for iOS5

I recently uploaded a test version of my app to iTunes Connect and the next day got this email:
We have discovered one or more issues with your recent delivery for
"MyApp". Your delivery was successful, but you may wish to correct the
following issues in your next delivery:
Missing 64-bit support -
Beginning on February 1, 2015 new iOS apps submitted to the App Store
must include 64-bit support and be built with the iOS 8 SDK. Beginning
June 1, 2015 app updates will also need to follow the same
requirements. To enable 64-bit in your project, we recommend using the
default Xcode build setting of “Standard architectures” to build a
single binary with both 32-bit and 64-bit code.
After you’ve corrected the issues, you can use Xcode or Application Loader
to upload a new binary to iTunes Connect.
The last time I did a release I couldn't upload the app until I fixed the 64-bit build so I know that's okay, but I'm still building against the iOS 5 SDK because our app still supports it. If I change to build for the iOS 8 SDK will this stop my app working for older versions of iOS? How can I tell if new functionality will still work on iOS 5?
You should always compile against the latest SDK, which is currently (3/2015) the iOS 8 SDK.
What you want to set is the "Deployment target". The deployment target specifies the lowest iOS version that you app claims to run on. The deployment target corresponds to the __IPHONE_OS_VERSION_MIN_REQUIRED macro, btw.
So, you can compile against the iOS 8 SDK, and at the same time set the deployment target of the project to "5.0" (or "5.1", or whatever). You have to be careful though that you don't use iOS 8 functions when running on an iOS 5 device, because it would crash the app. I use the -respondsToSelector: method often to test for the availability of functions. +lots of looking into the docs. +lots of testing on older devices.
Well when you update to iOS8 SDK, some of the functions will not work like Push Notification and Location Service. So you need to manage that part accordingly.

XCode base SDK version in code

How can I get the version of the base SDK in code? I am currently building for iOS in XCode 6 and using the base SDK 8.1 . I would like to know if there is any define with the value of the SDK to be able to test it and allow building with different base SDKs.
You can find out the version of the current Foundation framework that the code is running against by checking the value of NSFoundationVersionNumber.
If you check out the NSObjCRuntime.h you will find the various version numbers listed in there.
As in regards to building against different versions of the SDK; Apple stops App Store uploads if you don't build against the latest SDK once the cut off date has come into effect - i.e. new apps submitted now must be build against iOS 8 SDK.
What you can however do, is have a lower iOS Deployment Target (this you can find in your project's settings). This will allow for your app to run on older iOS versions, but it will still be built against the latest SDK. Do note though, it is your responsibility to ensure that you do not use any new APIs without first ensuring the current environment supports them e.g. UITextField's selectable property.
If you call that whilst running on iOS 6, your app will crash.
This can be done using __IPHONE_OS_VERSION_MAX_ALLOWED (which is the same version as the base SDK version). That can be compared to __IPHONE_8_0 where 8_0 is the iOS release.
For example, at this point you can use the baseSDK 8.0 or 8.1.

What determines if an iOS app gets the new look in iOS 7

What exactly does iOS 7 use to determine whether the application should be displayed with the traditional iOS 6 style UI (aka iOS6 compatibility mode), or the newer iOS 7 UI?
If I build our app in Xcode 5, with base SDK set to 7 I get the iOS 7 UI as expected
If I build our app in Xcode 5, with base SDK set to 6 I still get the iOS 7 UI (unexpected, happens on real device and simulator)
If I build in Xcode 4.x, I get the older UI as expected
In all cases, the deployment target is set to 5.
Since our app has fairly custom UI we're not ready to move to the new look of iOS 7 yet. However we do need to make some backend changes to support iOS 7 which we need to release now. Can we still submit apps built with Xcode 4.x and expect them to be accepted?
For the time being, you are able to. Apple will make an announcement when they stop accepting apps built with Xcode 4.x. My company is currently submitting apps with Xcode 4.6 since we do not have a new enough operating system for 5. I suspect it will be at least a few months until they stop.
Running against 6.1 Base SDK should do it.
However, as I discovered yesterday. Anything less than 7.0 Base SDK isn't supported by Xcode 5 (officially) and so it is undefined behaviour.
My app suddenly switched from iOS6 UI to iOS7 UI with no code changes.
In the end I restarted my mac and phone, deleted the app, deleted derived data and reinstalled cocoapods and it was working on iOS6 UI again.
Make sure that you set the Base SDK to iOS 6 in both the Project build settings & the target build settings - that should do the trick. Even though the target settings are supposed to override the project, I found that when just the target was set to 6 - it compiled with 7.
Regarding XCode 5, it's true that it doesn't officially ship with the iOS 6 SDK. However, you can extract it from XCode 4.6 and use it in 5.
You'll find the SDK in the XCode app under:
Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
Simply copy it from an existing installation of XCode 4.6 or from its .dmg (which can still be downloaded from Apple's website) to the corresponding folder in XCode 5, restart and you should now be able to select it as the Base SDK. Note that you'll have to do this after every update of XCode so you might find it easier to use a symbolic link rather than copying.
We've successfully submitted apps built this way to the App Store although as has been said before me, it would be a good idea to transition to iOS 7 ASAP before Apple makes it compulsory.

Resources