iOS, what should I set architectures setting in my project? - iphone

After doing some minor modifications to my app and loading it up into the latest xcode version, I've noticed the following settings.
Should I remove armv6?
The option in the drop down says armv7, armv7s.
What should I set ?

If you don't really want to support iPhone 3G and lower (not 3GS) then you can remove armv6. If you do, then you'll need to support only iOS 4.* and lower, and i don't think you really need it.
So, you can feel free to remove armv6 from the list.

As shown is image, If you select both architectures, the product built will execute on all iOS devices including iPhone 3G. If you have to run your code on iPhone 3GS or above. You can set armv7 in setting.

Set ARMv6 if you want to support iPhone(original) and iPhone 3G.
Set ARMv7 if you want to support iPhone 3GS, iPhone 4 and iPhone 4S
Set ARMv7s if you want to support iPhone 5
Here is a little explanation about the basics on iPhone processors technology.
Just for the record, iPhone(original), 3G and 3GS were discontinued.

Related

Restrict iPhone/iPad App to iPhone 4 and higher only?

I am looking to make my app so that it only works on iPhone4 or higher, and not the 3GS.
How can I do this? Is it done via setting the Architectures setting to Standard Armv7/Armv7s
And Valid architectures to Armv7 & Armv7s?
Or do I need to look at deployment target? And set it to a certain iOS version?
Thanks in advance!
Deployment target is only going to allow you to target a specific iOS version and a 3GS can run iOS6. If you're truly looking to restrict older devices from running your app you're likely going to have to do some checks for device model within the AppDelegate and restrict functionality.
A caveat to this is that your app will likely not be permitted in the App Store. What feature(s) are you trying to leverage that a 3GS doesn't support?
Unfortunately you can target the iOS version not the device! You can try to build for iOS 6.0+ and it'll isolate some older devices like iPad1. I'm not sure what iOS version will go up to on 3GS, it'll be phased out soon, though with upcoming iOS releases. I know iOS 6 will work on 3GS but iPad1 won't
You can detect the device, and restrict it via code, but through Apple and iTunes, there is no device centric restrictions, only OS.

Monotouch iPhone 5 build and app that supports ARM6

I'm wondering what I need to do with my existing application when I build it. Currently I target ARM6 and ARM7 using 4.0 as my target build SDK.
I don't really want to drop ARM6 support but I also want to make sure that my app can be used on the new iPhone. From what I can tell Apple also won't let you drop support for ARM6 on apps that are already in the store and support that architecture.
Do I have to create a new version of my application just for iPhone 5 users?
Apple lets you drop ARMv6 support.
The trick is that you have to set the Deployment Target to an iOS version that is guaranteed to have ARMv7 support (I believe this would be 4.3).
That said, you do not have to drop ARMv6 just to make your app run on iPhone 5, your existing app will work just fine (but you will not be able to use any of the new iOS 6 features).
What if I don't want to drop the ARMv6 support? A lot of people are still using the old phones. My app just needs to support fullscreen on iPhone5.
This basically means that Apple has prevented the same app from running on iPhone 5 and older phones!
I'll try to submit the iPhone5 version as a separate app on iTunes connect, so that people can use the app on older phones and still enjoy full screen on iPhone 5. let's hope Apple doesn't reject my app - it's their fault after all!

Can i submit to the app store with armv6 code only (not armv7) for an app supporting iOS 4.2+?

Is armv7 an absolute requirement for submission to the app store currently?
The application is being built against the latest xcode, against the latest sdk (5.1) but with the minimum iOS version being 4.2. If we remove armv7 (due to a third party library, please dont ask) can we still submit to the app store with armv6 only?
Thanks
Short answer: Yes
I assume that if you are targeting iOS 4.2+ it includes 2nd gen devices (my iPod touch has 4.2.1 ) ...and those only work with armv6.
In any case...apps that work on armv6 work on armv7.
Now...if you haven't tested your app on 2nd gen device I suggest that you make minimum iOS required to be 4.3 (as in 3rd gen+)

Xcode Set Compatible Devices

I have released my first app on the iOS App Store a few days ago and told my friends to download it. However, they have told me that it is not compatible with the iPod Touch 2G running iOS 4.2.1. Why is this? And how do I fix this?
I am using Xcode 4.2 with iOS SDK 5.0, but my deployment target is iOS 4.0, so it should work.
On the iTunes page for my app, it says: Requirements: Compatible with iPhone 3GS, iPhone 4, iPhone 4S, iPod touch (3rd generation), iPod touch (4th generation) and iPad. Requires iOS 4.0 or later.
How do I include the iPod Touch 2G in this list? I have an iPod 3G as one of my testing devices and my app works perfectly on it.
Thanks in advance for your help,
Guvvy
The most likely cause is that you did not build for armv6. This is a common issue usually caught in debugging, but since you did not test on these devices you did not catch it.
If you want to add support for armv6 devices, like iPod touch 2nd gen & iPhone 3g, then in addition to setting your deployment target like you have done you must also:
1) Add armv6 to the Architectures field:
2) Remove armv7 from the requirements in the info.plist:
3) Test to ensure compatibility with these devices. Please do not ignore this step.

Can you require the iPhone 3Gs (or newer) with build settings?

My app doesn't run on the slower hardware, but I want to support iOS 4.0, which iPhone 3G (and equivalent 2nd gen iPod touch) can run. Is there a way to prevent it from being installed via the build settings? (I'd prefer not to have to enforce it in code when the app launches.)
I thought that the VALID_ARCHS build setting might do it by removing arm6 (leaving only arm7), but I was able to install directly to a 2nd gen. iPod touch.
(I found the answer as I was posting this question, but the question "Iphone 3Gs And Iphone 3" isn't very searchable, so I posted this and answered it to help others in the future.)
iPhone 1, iPhone 3G are armv6. iPhone 3Gs, iPhone 4 are armv7. (iPad is armv7.)
You should set the UIRequiredDeviceCapabilities setting in the Info.plist to the desired architecture (in this case armv7). You should also remove armv6 from the target build settings to reduce your compile time.)
Original answer found here.
edit: Apple wouldn't accept a submission with this key there. I will try this possible duplicate and then update my answer here.
edit 2: Looks like that answer worked.
FYI: I ultimately had to support the older models because my app had once been (erroneously) released. Apple's system makes you support all hardware models you have ever supported. (Which makes sense from the consumer side, which is that apps you download or buy shouldn't stop working, but stinks for me.)