I have currently developed an iOS app. The deployment target is 7.1 and I am targeting iPhone5/5s and iPhone6/6s as main devices.
After I have finished development, my app got rejected stating that it does not support the device screen size of the iPhone6.
I have tested this app using the iPhone6 simulator and my real iPhone 6 and everything looks correct and scaled.
I am using AutoLayout
I have set constraints
I was using a LaunchScreen but after i read many posts i deleted the LaunchScreen and added Launch Images with all the sizes and with the correct default names.
The app review team provided me with screenshots that shows my app running on an iPhone6 however with the layout dimensions of an iPhone5s (the layout is not scaled, there is a large white border)
Could you please guys provide me with any tips?
I was using a LaunchScreen but after i read many posts i deleted the LaunchScreen and added Launch Images
That's the problem. You must use a launch screen, because otherwise your app does not run natively on iPhone 6; instead, it is treated as an iPhone 5 and scaled up, exactly as Apple's screenshots showed you. Apple will no longer accept that; you must run natively, so you must use a launch screen.
You need to add launch images of the below resolutions to support iPhone6. Pl. refer to the below url which clearly specifies the dimension of the launch images to be used.
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html
Related
I have removed the launch screen file and removed all references from the info.plist file and in the main settings of the project the launch screen text field is empty.
What should I do?
Based on other related questions, the ITMS 90096 error means your app isn't optimized for the iPhone 5.
Since you are supporting iOS 7 you must provide all of the appropriate launch images. You will need ones for 3.5" and 4" devices at a minimum. You should also provide ones for the 4.7" and 5.5" devices as well if you want happy users. And if your app is a universal app then you also need the iPad launch images.
You don't need a launch screen (unless you want native support for the iPad Pro*) but you must provide launch images.
* No longer true as of Xcode 8.
I know that there are several answers for this question, but I was not clear about the result. Here are a few questions:
1) If I created a project as an iPhone project, selecting device as iPhone in deployment info, and designed the app using universal storyboard (i.e any width and any height (600x600) ). Once the design is completed and it is run on an iPad, the UI does not look good. If that is the case then, what's the point in selecting the device as an iPhone? Am I right that when selecting the device as iPhone or iPad, Xcode will allow the app to only run on those devices?
2) Now converting iPhone app to universal app: since image resolution varies from iPhone to universal app, do we have to replace all old images with new images supporting the universal app?
3) If I have an iPhone app, the Apple team will test it, both on an iPhone as well as on an iPad. If they found the UI doesnt match the iPad, will they reject the app?
I would imagine the UI looks just like it does on the iPhone, just enlarged to fit on the iPad. Basically this is because iPhone only apps can be run on iPads, but not vice versa. If you change the app to a Universal app, it will try to run natively on the iPad, and may look better if you have appropriately used auto-layout and size classes.
(Optional other cause) The other option is you're running into an iOS 8 issue where if you use an storyborad or nib for the launch file, it will mistakenly make an iPhone only app work as a Universal one. The use of Launch Screen File in iOS 8.0, 8.0.1 and 8.0.2 will make you universal.
This is a know bug and fixed in iOS 8.1, for you only option is to use assets catalog with a launch images.
Or you can add the device modifier in the Launch file name, like <launchNib>~iphone.nib
As far as images go, you will want to make sure you have images for the different resolutions (#1x, #2x, #3x). If you haven't already, I recommend reading up on asset catalogs (http://schlu.org/2013/10/01/Xcode-Asset-Catalogs.html). Images are not inherently different between iPhone and iPad (except for launch images), but it's the pixel density that really matters (older devices are 1x, most retina devices are #2x, and the 6 Plus is #3x).
If it is truly just an iPhone app, Apple will not reject the app because it looks pixelated and ugly on an iPad. The ability to run iPhone only apps on iPads stems from the initial release of the iPad when people hadn't created iPad or Universal apps yet. Apple basically provides it if someone REALLY wants an app that hasn't been created to specifically support the iPad yet.
That said, I would just go ahead and release it as a universal app. If you don't have revenue reasons for creating separate apps, I wouldn't recommend the extra hassle of having two apps. If course, if your app doesn't make sense on the iPad, simply make it iPhone only.
These are the common practices according to your questions
User interface doesn't depend on deployment devices. User interface depends on your implemented UI logic. As you said, default storyboard size is 600x600 (this could be easily changed), but this doesn't mean, that all devices should be this resolution. When the resolution is different, images and UI elements are misplaced. There are several ways to implement UI logic and make UI flexible, but I guess your question is not about that. So, short answer - devices selections are more about deployment than UI.
It might be some different images for different devices, but images such as buttons or text fields or etc should be flexible.
No, Apple doesn't care about your application appearance and design.
I hope I have answered to your questions.
I am making a test sprite kit game, and when I run it on the device, the splash screen doesn't show up although it does work on the simulator.
Here are some screenshots:
Normally I set the target to iOS 7.1 and later, so I use a .xib file and LaunchImage file in xcassets.
I have put 2 correctly sized splash screens in the iPhone portrait iOS 7&8 section, and have selected "Portrait" under iOS 7 and later. The link from the settings file is definitely going to the correct file.
When I run it on the simulator (presumably all devices are iOS 8), the .xib file is used and it displays that splash screen.
When I run it on my iPhone 4, it displays a black screen. In my other apps, it would choose the image from xcassets and display it, but this is not the case.
Does anyone know how I could solve this problem?
Edit
Basically, I have put 4 images into xcassets for a splash screen. I have selected iPhone portrait for iOS 7 and iOS 8.
In the settings pane I deleted the launch screen file reference, so the only reference is to the xcassets launch image (It points to the correct place). I have also deleted the LaunchScreen.xib file.
But when I run the app on the device and the simulator, no splash screen shows up.
I faced similar issue and fixed by Restarting the Mac and iPhone
Uninstalling the app from Simulator/ iPhone helped to fix this issue.
I was having the same problem, and I finally figured out a solution. I want my launch screen to show up on ALL devices capable of running iOS 7 or later, when running my landscape-only Sprite Kit game. Most devices that run iOS 7 can be upgraded to iOS 8 or greater, except for the iPhone 4 (which is stuck with iOS 7.1), and the launch screen wasn't appearing on my iPhone 4 test device. Then I stumbled across Apple Tech Note TN2244. As described in the Tech Note, once you edit the info.plist to enable landscape orientation for iOS 7.0+ iPhone launch images, the correct launch image will appear. As a side note, if you disable the launch image asset catalogs as suggested, the XCode Swift compiler gives you warning messages -- but you don't really need to disable launch image asset catalogs, and if you configure them properly the warnings will disappear and landscape launch images will now work just fine on all devices, including iPhone 4.
Your app's launch image is displayed as soon as your launch your app. Hence the name. It is removed when the appDelegate appDidFinishLaunching: method runs. If you are app has very little to load, your image might get displayed and removed before you have time to see it.
If you want to manually set a longer display time for your launch image, you can add this code to the appDidFinishLaunching: in the appDelegate.m file:
sleep(4);
4 being the number of seconds.
So I'm working on a Cordova-based app for both iOS and Android. The iOS portion of it is meant to run only on iPhones and iPod Touches.
When I last submitted my app for reviewal, I got this rejection message from them:
2.10: iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution
Thing is, here is what my app looks like in an iPad:
I hunted around for another app that is also running on the iPad at iPhone sizes, and I found FourSquare:
As far as I can tell, they're running at the same resolution.
I did a $(window).width() and .height() call in my app, and I get 320x480, which as far as I can tell is the resolution of the original iPhone.
I found this other SO question here that addresses a similar (I think) problem: 2.10 iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution
But when I check my settings ([project target] > App Icons and Launch Images), "Launch Images Source" is set to LaunchImage, and "Launch Screen File" is blank. (my experience with native iOS settings and storyboards is limited, so I'm not sure if I'm correctly implementing the solution prescribed in the linked SO question).
I also found this other one here: Make an iPhone specific app work on iPad to meet Apple requirements
It talks about editing one's .plist file to remove all references to iPad. I found two entries in mine, 'CFBundleIcons~ipad' and 'Main nib file base name (iPad)', both of which have no values (the value column is empty). Should I remove those? I'd run them to try, but I'm slightly afraid I might explode something beyond repair (plus the time taken to try, submit for review, and wait for Apple to get back to me is infinity+5 seconds, and the project's already behind schedule as is :( ).
I have several games made with Cocos2d-iphone. All of them are old projects created with Xcode 4 or 5. All games scale fine on the new iPhone 6 and 6 Plus except one that seems to avoid the scaling mode and is running on native iPhone 6/6 Plus resolution. The project does not contain Launch images with the resolutions that seem to disable the scaling mode as explained here
Is there anything else that unlocks the native resolutions? I want the game to run in scaling mode for now until the HD assets are ready for the new resolutions.
I've made a new empty project that does not have any assets and it is working with the native screen sizes.
1. Is there anything else that unlocks the native resolutions?
No for older projects you can only unlock native resolutions by adding launch images
2.I've made a new empty project that does not have any assets and it is working with the native screen sizes.
If you create project from XCode 6 naive resolution will be automatically enabled even if launch images are not added. I just created new sample project from Xcode 5.1.1 and than ran it on Xcode 6 and naive resolution was not enabled and views were scaled in order to fit the screen.
Hope that clears the confusion as your project are old as you mentioned naive resolution will not be enabled unless you add launch images.
Correction
Based on comments i am correcting my answer for projects created in XCode 6 you can delete
Launch Screen File and also not add any iPhone 6/6+ specific launch images. The app will not run in native iPhone 6/6+ resolution.
So For iOS8 you can have either Launch images for iPhone 6 and 6 Plus or a Launch Screen File
Bhumit is partially right, but I believe there is one missing detail.
To disable native resolution (and ensure scaled resolution) I did the following:
Remove LaunchScreen.xib from project as well as any iPhone 6/6+ launch images you may have.
In your app's target, go to General, and under "Launch Screen File" blank out the entry.
Clean and rebuild