Submitting separate IPAs for each iPhone model - ios

My app has unique interface for each iPhone model. More specifically, there is a unique interface for each screen size. While I could embed everything in a single app, there are many unused assets. For instance, full screen image for iPhone 4S requires 1.76 MB, but IPA requires 12.63 MB for the same asset because it contains a separate image for each possible screen size.
Is it possible to submit separate IPA's for each iPhone model, where each includes only assets required for that specific iPhone?

No you can't. The workflow Apple has built is to include all assets for every screen size. You use tools like autolayout to show and hide things based on screen size.

please change your project to support auto-loayout or handle view programmatically.
what you intended wont work.

You don't need to (or are able to), have multiple .ipa files for an app at one time. In fact, you've probably created more work for yourself then you actually needed to do by trying to do so.
Apple is now encouraging developers to embrace Adaptive User Interfaces. As their guide states, "With the latest advancements with View Controllers in iOS 8 and Auto Layout in Xcode, it’s now even easier for you to adapt your user interface to context and different sized devices". In other words, you only need a single storyboard for all iOS devices.
I would encourage you to do some more research on this concept, and adopt it for your app. This tutorial should get you started.

Related

Does the app get auto resized?

Does the application get auto resized when uploaded to the AppStore to fit all devices like iPhone 5 and iPhone 7+ ?
I'm asking this because I'm about to release a new app for the Appstore but in the simulator and on a real device the application doesn't gets resized and all the buttons and label etc are not where they should be.
I am also developing an iOS app, so I understand your problem.
The application doesn't get resized.
The buttons/labels won't be put wherever they should be as Xcode doesn't know where to put them. This is because the screen size varies with each device.
You should use constraints (really good tutorial) to put your buttons/labels wherever you want them to be. Another good tutorial
It's not automatic. You need to design your app to handle layouts on different devices. It's a rather complex subject. You'll need to learn about AutoLayout and size classes, among other topics. If your app isn't handling this correctly, it's not ready for the app store.
Firstly check your application is universal application .
Then You need to look at your Auto Layout constraints inside your storyboard.
Understanding Auto Layout

Can I have two separate applications for iPhone and iPad?

I have completed an iPad app which only available on iPad iTune store.
But client wants to have different design but similar functionality application for iPhone as well. Some of new feature must be added to iPhone version. I can use most of the functionalities in iPad version and have a new project and build iPhone from scratch!
My requirements will be change during time. New requirements could be for both or either of them. Therefore, I need to add new features in both applications time to time and maintain both applications as well. This app is pretty much complex with more than 150 classes. I need some advice to know is it better to have only one application to works on both devices or it is better practice to have separate project for each iPhone and iPad?
EDIT
I want to use split view controller and vertical menu bar in iPad and side menu and horizontal menu bar in iPhone.
if you want to have two separate iPhone/iPad apps on the store, just make two targets of your application. This will mean you'll probably will use two different storyboards, but that's up to you. Go to your project settings and make two separate targets - one for iPad, one for iPhone. Edit the target general settings where one should only deploy for iPad while the other for iPhone. Posted some pictures below:
You'll want to also go to Manage Schemes, remove the current schemes you have and add the targets you just made. Then set these macros in your iPhone build so you can just edit one code base without needing to edit both the phone and tablet code -
Some example Code:
// Just for Phone Target
#ifdef PHONE
- (void)somePhoneMethod;
#endif
// For both phone and tablet device
- (void)aMethod;
I'd like to add to what everyone has said and if there isn't too much difference just make a universal app.
Use Auto layout and maintain in a single storyboard.
If you know about classes ,Autolayout Strong then my preference is
AutoLayout.
It will reduce your time and easiest handling.
this is Classes here if you like to do vertical layout only for ipad means ,you need to select like this
like this you can choose only for ipad,iphones,portrait,landscape like this :),Its upto your decision.
If UI is same for both so its better to use existing just check in classes for iPad and iPhone.

When creating a portrait only, iPhone only application, are size classes in XCode necessary?

I'm writing an application that is only portrait and is only intended for use on phones. Is there any reason to go through the hassle of size classes since landscape and iPad won't be supported? Could not using size classes create a problem when submitting the app to Apple for review?
You can go without size classes and it depends on user to use size classes or not, Apple won't reject your App.
I've also submitted my App without size classes and its is in App Store.
Without sizeclass,you can't use present as popover segue.So you can't have an popover viewcontoller as iPad's.Many other usefull funcs prefixed with adapt is unavailable to you too.
If you just decided to forget them all,you can leave size class alone.

Binary Not Optimized for iPhone 5 - all icons included

So I was about to send my app in for review to be published on the app store, but I got this error:
I found some related StackOverflow answers that recommended that I add icon files in appropriate sizes, which I have done.
However, the build is still failing.
To add confusion to whatever is happening in this case, I have followed all instructions in the error message apple gives me and still it fails to upload:
I have set up UILaunchImages in my .plist file:
I have included an image Default-Portrait.png in the root level of my bundle:
So given that my launch screen and icons seem to be in order as far as the error messages describe, I am not sure what to do from here.
Any ideas what else could be going on here?
To clarify what was mentioned by #jrturton, the recommended way for iOS 8 is to create a Launch Screen, a Storyboard that you can design to adapt to various screen sizes with Auto Layout and size classes. This will be much easier than separate images for all past and future screen sizes.
Project > General:
You need default-portrait~568 as well. If you're using launch images you need one for 3.5 inch screens and one for 4 inch screens.
If you use an asset catalogue for your launch images you can see exactly what is required.
Better yet, use a .xib file which will scale automatically and give you proper support for all device sizes.

Choose custom iOS compatibility

I have an app that recently got rejected because it doesn't work well on iPhone 4/4s or iPad. Is there a way in Xcode to say that it's only for certain models?
I dont think so, try to optimize your application for those devices
You don't define models as such; you define capabilities. You can sometimes use these to cull models as well, but only if your app legitimately uses whatever it is you're testing for.
An example: Bluetooth LE is only available 4s+. You can set your app to require this (or other certain hardware options) via plist keys (UIRequiredDeviceCapabilities - https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html) but only if your app actually uses BTLE. You will very likely get rejected if you "require" something you're not using.
Between iPad and non-iPad devices, you control that directly by what you select in the Deployment Info:Devices section of your project.
As annoying as it may be, you should totally modify your UI to be compatible, at least, with all iPhone models.
I assume you've built a layout that is made to fit exactly to the 4" screen. An easy solution would be to put your views into a scrollView instead of just on your view controller's view directly. Then you can at least scroll the UI to see it more easily on the iPhone 4.
But really, your solution should be to adopt auto layout and size classes, and make your UI completely compatible with all iOS devices. It's well worth the effort because it opens your audience to more users, and reduces the risk of poor ratings like "looks bad on iPad even though its not made for iPad. One Star."

Resources