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."
Related
Currently I was designed and developed my app in iPhone . Now I wanted make my app universal(iphone and iPad).Please guide me what will be the efforts and challenges on design and development ? could you please explain the steps.
While developing a app and want to makeit a universal app you should have to -
Make sure the design compatible for both iPhone and iPad. you can check it
from physical devices or form the simulator.
Make sure all the fields are ok (not breaking down while switching the
devices).
Make sure all the scrolling are working for both iPhone and iPad.
The main efforts will be on the following areas.
UI
You will need to obtain a new design suited for iPad depending on what you already have. If it is a simple interface, you port it to be viewed on iPad without a new design. But usually you need a iPad specific design.
You will have to change the layout of most screens to make it look good on the iPad. If auto layout is already used, it will be a little bit simpler. Otherwise I guess you will need to start thinking about separate storyboards and xibs for iPad specific screens.
Code
Assuming there is no additional functionality specific to the iPad, the main areas of change in code will be the those handling view presentation logic, navigation and animation. It all depends on the design you need to implement, but generally I would say you will need to change code that handles animation, presents new view controllers, handles storyboards etc.
Resources
You will need to provide resources specific to your iPad design.
Testing
Obviously you will need to do a LOT of testing :).
Eg: For example, location handling. There are no modern iPhones without GPS hardware, but iPads without cellular capabilities do not have GPS. So you location handling code might have to be rechecked. (It broke for me :))
AppStore
You will need to provide app store screenshots for the iPad screens.
We're looking to create an app that has 2 interfaces depending on what type of user logs in. The first user type (customer) will be using the app on their iPhone (almost exclusively) and the second user type (merchant) will be using it on their iPad (also almost exclusively). There are budget constraints preventing us from making both interfaces flexible to support both of these types of screen sizes.
What options do we have from a development perspective that allow us to create an experience that both of these user types will best benefit from? Do we need to submit 2 separate apps to the app store to achieve this or is there some other fancy way?
Apple Guidelines
Important: It is strongly recommended that your iPad applications
support all orientations. This includes portrait, portrait
upside-down, landscape left and landscape right. iPad apps that
require an orientation must support both variants of that orientation.
Which basically means, if you want to support iPad, you have no other option than to allow both variants of a single orientation (atleast). This will make the UI easy to support both iPad and iPhone, however:
depending on what type of user logs in.
The main question here is: Does your "merchant" run strictly and only on iPad? If so, then the clean way is probably to have 2 apps, that way you can control the content and code since you probably are showing different UI etc to your merchant/customers. If you have many differences in code and UI, you are best to go with 2 apps in my opinion.
However, no matter how you twist and turn, the ammount of work that needs to be taken into account for any option, depends on a list of other factors and can't be answered here, (would take a developer to go through your code/Design/project and estimate the work)
EDIT:
You have no "fancy" option to support 2 different devices and by any fancy methods choose who is allowed to use your app with what device after they have installed your product through App Store. Apple will and should reject that.
Make it support for both iPad and iPhone Applications depending on user. If anyone enters from wrong platform detect and give a message to them.
It also awareness your users that they are supposed to use iPad or iPhone only.
And you can check the platform by using the code:
#define IDIOM UI_USER_INTERFACE_IDIOM()
#define IPAD UIUserInterfaceIdiomPad
if ( IDIOM == IPAD ) {
/* do something specifically for iPad. */
} else {
/* do something specifically for iPhone or iPod touch. */
}
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.
I'm working on an iOS app, that should work fine with both iphones and ipads.
As I know we can build the app as universal or convert iphone storyboard into ipad storyboard.What I want to know is, what is the best way from these and, when we launch app to app store, is it a problem to have two storyboards one for iphone and another for ipad.
What I want to know is, what is the best way
That depends on your needs. Do you want the interface to be the same on iPhone and iPad, except sized differently? Then you may be able to use a single storyboard and rely on autolayout to adapt to different devices. If you want different interfaces on iPhone and iPad, perhaps to take better advantage of a much larger screen, then use different storyboards for each device type. You should still use autolayout in each storyboard, though, because within each device type there are several different screen sizes.
is it a problem to have two storyboards one for iphone and another for iPad
No.
Two storyboards for each type of device is a best way. As a result you will have more usable and careful UX for both types. But this way require a little bit more time for developing.
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.