Using in app purchase to unlock iPad UI? [duplicate] - iphone

I've seen tons of questions and answers regarding merging an iPhone and an iPad app into an universal app, but that isn't what I want to do. What I am going to do is use in app purchase to unlock an iPad interface and then display the correct interface using conditionals. If the interface is purchased, the app displays the iPad Nib, and if not, it just displays the same way as an iPhone application does (with the option to scale the app, etc). The conditionals are very simple and I have already implemented them, however the issue I run into is this: If the IAP is NOT purchased, the iPad displays the iPhone Nib, but not in the typical way. It is just in the corner with no option to scale it, rather than in the center with the black border that you usually see. Does anyone know how I can set it up so i fixes this issue? I'm a little stumped to be honest.

The Info.plist file in an iOS app contains a key, UIDeviceFamily, which lists the devices that the app natively supports. If the key's value is 1, or a array containing 1, the app natively supports iPhones and iPods Touch. If the value is 2, or a array containing 2, the app natively supports iPads.
If UIDeviceFamily says the app supports iPads, then it will run the app in native iPad mode, not in iPhone-wrapper mode.
The Info.plist file is part of your app bundle, and you can't modify files in the app bundle.
So there is no way to enable or disable the system's native-iPad support at runtime. You'll have to move your app's top-level view into a wrapper view that centers and scales its child, and use that wrapper view as the UIWindow's subview.
UIDeviceFamily in the Information Property List Key Reference

This isn't possible, unfortunately. The iPad will know that the app is iPad ready and will tell draw the screen at full size. Even if you showed iPhone xib file on the iPad, they would still be scaled to fit the full screen using the UIViewAutoresizingMask params you've set for them.
One thought would be to force the size of your UIWindow to be iPhone sized (remember to account for retina) and centered, but I'm not 100% sure how/if this would work. You may have to change each UIView frame. I'm not sure.

Related

iPhone 5 Optimization Requirement - Launch image really necessary?

When trying to upload a binary to App Store, I get the following response in an email:
"iPhone 5 Optimization Requirement - Your binary is not optimized for iPhone 5. As of May 1, all new iPhone apps and app updates submitted must support the 4-inch display on iPhone 5. All apps must include a launch image of the appropriate size. Learn more about iPhone 5 support by reviewing the iOS Human Interface Guidelines."
Also, the status of the app is "Illegal binary".
I've read that I must include a launch image called "Default-568h#2x.png". Question is: My app was not intending to have a launch image at all. Am I really required to have a launch image now?
Yes you must include one. Not only does the launch image give the hint to the OS about the app's iPhone 5 (4" screen) support, but launch images in general are required:
From Apple's Interface Guidelines
To enhance the user’s experience at app launch, you must provide at least one launch image. A launch image looks very similar to the first screen your app displays. iOS displays this image instantly when the user starts your app and until the app is fully ready to use. As soon as your app is ready for use, your app displays its first screen, replacing the launch placeholder image.
Furthermore:
Generally, design a launch image that is identical to the first screen of the app.
So really, making a launch image that is about the same as the first screen of your app (e.g. if the first screen is a UITableViewController with a toolbar and navigation bar, perhaps the screen looks like an empty navigation bar, an empty toolbar, and an empty table view, which then suddenly all become populated as soon as your app really gets going), is the way to go for the best user experience.
If really you don't want or need this, then make the default images just be black.
Yes, as stated, as of May 1, 2013, all new apps and app updates must provide support for the new iPhone 5 4-inch display.
The way to indicate that your app supports (has been tested with) the new iPhone 5 resolution is to simply include the launch image for that device.
You can simply create a black .png image (which is what your other default launch images are anyway) that is 640 x 1136 pixels and use that as the launch image for that device.
Simply including the new splash screen image (Default-568h#2x.png) is not enough
You must re-build your project with the iOS 6.0 SDK (or newer) - which supports iPhone 5
So if you're still using an older SDK, update your XCode in the App Store first
Yes. from 1st May, you can't upload application with out including Default-568h#2x.png in your application.

View doesn't take up full screen on iPad

Simply that. I'm working on an iPhone (iOS) game that loads without using .xib files. Window and view is created programmatically. It automatically detects resolution and retina display and adjusts accordingly.
However when run on and iPad (only have the simulator for iPad), it shows up in a mini window that same size as the iPhone resolution, with a little 2x button in the bottom-right corner. I want it to load fullscreen with full resolution (larger res than the phone). Everything will scale accordingly so it would look the same as on the phone, and look just as crisp.
Why does this happen? Why doesn't the window automatically take up the fullscreen like it does on iPhone?
After much searching, I've found this template: https://github.com/ryanscott/rcloudlib/blob/master/Samples/clean_universal_app_template.zip
which loads properly for me on both iPhone and iPad.
Looking at the code, however, it does nothing differant than what I am doing. All it does is check which device is being used, and loads the appropriate app delegate, which in this case contain the exact same code, albeit for background color. This is clearly aimed towards those who want to have a different view load on iPhone vs. iPad, while avoiding using nibs. I want the SAME view across all devices, so I have no need to use multiple delegates or the like.
How can I force the app delegate to use the fullscreen regardless of device?
In your Xcode project file, find your target, go to the Summary tab and make sure that Devices is set to Universal under iOS Application Target
Yup! In Xcode 6 the "Devices" option is now called "Deployment Target" and is located here:

Running a universal app as a scaled iPhone app?

I've seen tons of questions and answers regarding merging an iPhone and an iPad app into an universal app, but that isn't what I want to do. What I am going to do is use in app purchase to unlock an iPad interface and then display the correct interface using conditionals. If the interface is purchased, the app displays the iPad Nib, and if not, it just displays the same way as an iPhone application does (with the option to scale the app, etc). The conditionals are very simple and I have already implemented them, however the issue I run into is this: If the IAP is NOT purchased, the iPad displays the iPhone Nib, but not in the typical way. It is just in the corner with no option to scale it, rather than in the center with the black border that you usually see. Does anyone know how I can set it up so i fixes this issue? I'm a little stumped to be honest.
The Info.plist file in an iOS app contains a key, UIDeviceFamily, which lists the devices that the app natively supports. If the key's value is 1, or a array containing 1, the app natively supports iPhones and iPods Touch. If the value is 2, or a array containing 2, the app natively supports iPads.
If UIDeviceFamily says the app supports iPads, then it will run the app in native iPad mode, not in iPhone-wrapper mode.
The Info.plist file is part of your app bundle, and you can't modify files in the app bundle.
So there is no way to enable or disable the system's native-iPad support at runtime. You'll have to move your app's top-level view into a wrapper view that centers and scales its child, and use that wrapper view as the UIWindow's subview.
UIDeviceFamily in the Information Property List Key Reference
This isn't possible, unfortunately. The iPad will know that the app is iPad ready and will tell draw the screen at full size. Even if you showed iPhone xib file on the iPad, they would still be scaled to fit the full screen using the UIViewAutoresizingMask params you've set for them.
One thought would be to force the size of your UIWindow to be iPhone sized (remember to account for retina) and centered, but I'm not 100% sure how/if this would work. You may have to change each UIView frame. I'm not sure.

why does an iOS universal app need to have two different xib files?

I'm a newbie of iOS development and I'm confused regarding universal app.
We can use the same code, same xib file for iPhone 4(retina) and previous iPhones, but why we should write two different xibs for iPhone and iPad? What's the difference?
For iPhone and retina iPhone, we use "point" instead of pixel for the coordinate. Why we can't use the similar method for iPhone and iPad?
For some simple apps, it is possible to design your iPhone UI and reuse the same xib file for the iPad. Just select your Target in XCode and copy the Main Interface text from iPhone / iPod Deployment Info to iPad Deployment Info. If you're using a Main Storyboard, copy that too. However, the iPad does not simply scale everything up from the 320*480 / 640*960 iPhone screen to the 768*1024 / 1536*2048 iPad screen. #elgarva correctly says that this would look terrible. Instead, the iPad version makes use of your autosizing masks to resize or reposition each view.
If all of your views can be considered to be left-middle-right or top-middle-bottom, this may work. If you have anything more complicated, you'll need to design a separate iPad interface.
Duplicating your iPhone UI is not just discouraged for aesthetic reasons - iPhones often end up containing a deep and confusing navigation tree for tasks that the iPad can fit on a single screen.
The main reason, is that if you just scale the elements on the UI to fit the larger screen, it wouldn't look nice... and you don't need to do anything for it to work, it automatically does it for you if your app is iPhone only and installed on an iPad (if the user chooses to).
Having a different XIB lets you rearrange your app, and think it so that you can take advantage of the larger screen. You can probably show more information on one iPad view than on 3 different screens on the iPhone... so, your iPhone app could show basic info and expand it when the user taps on it, while your iPad version could show all the information on load, plus extra graphics that look nice but aren't needed, and wouldn't make sense on the iPhone screen.
PS: If you're starting a new app, I strongly suggest you using the storyboard if your app won't have a lot of views... it's really easy to get started and it lets you see your app flow at a glance.
The ratina display just doubles the resolution of original iPhone. If you don't provide separate graphics for retina display, then system just doubles the resolution of resources.
The points are related to physical size of screen, which is similar in old and new iPhones.
For iPads, the screen size changes. This means that its dimension in points will be different from that of iPhone.
duplicating the xib file and renaming that as filename~ipad.xib is working great for me in ios6.1

How to make an iphone and iphone4-retina compatible app (done in cocoa) easily adapted to ipad?

My question is simple: when an iPhone app also supports retina display, it does not need an additional xib file. (Fonts and images are auto-scaled, you just need to prepare double-resolution images.) I want that retina view also applies to iPad and hence there's no additional xib files. (Scale a bit and leave a bit margin, maybe.) Yes, I just want it look bigger, but not in the low-resolution version scaled up from 320x480.
The iPhone, even with a retina display, is not an iPad. You can update your targets and xcode will convert automatically your views to use the entire screen of the iPad, but it won't make the application conforms to
1. Apple guidelines
2. Users expectations of an universal app.
But, as I said, if you do update your targets, your app might look relatively good (just programatically use UI_USER_INTERFACE_IDIOM to use the #2x.png version of your images).
Edit: I misunderstood your question, and now the corrected answer:
There's nothing you can do. The iPad will launch the app as an iPhone app (the small non retina display, pixelated if double sized) if it is defined as such in your plist, and iTunes Connect will sell your app as universal if it isn't defined as an iPhone in the info.plist.
You basically have little choice here but to port the app or to more or less forget about iPad users. And Apple certainly wanted things to be that way...