Related
I have an iPhone application which has a storyboard. Now I want to provide an iPad application too. So I asked me whether there is a function which helps me convert my iPhone storyboard to an iPad storyboard.
To be specific:
Is there a similar function or is there only the manual way ?
I found out a kind of solution:
Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.storyboard
Close Xcode and then open this file any text editor.
Search for targetRuntime="iOS.CocoaTouch"and change it to targetRuntime="iOS.CocoaTouch.iPad"
Change the code in the MainStoryboard_iPad.storyboard from:
<simulatedScreenMetrics key="destination" type="retina4"/> to
<simulatedScreenMetrics key="destination"/>
Now save everything and reopen Xcode. The iPad-Storyboard has the same contents as the iPhone-file but everyting could be disarranged.
This saved me hours - hopefully this will help you
If you had created a universal project, by default empty iPad storyboard would have been created, you just have to select iPhone storyboard select all (Command+A), copy (Command+C) and paste it on iPad storyboard. Make sure to move the entry point from the empty storyboard to newly copied storyboard before compiling.
That didn't quite work for me. I did something a little bit different.
Create a new story board file for the iPad version
Open both the new file and the file i want to copy in textwrangler (text editor)
Copied the xml text from old file to the new file between these xml tags
First Tag <scenes> <!--Contents View Controller-->
Paste Here
End Tags </class> </classes>
That worked for me. I got a new layoutout with all my outlets connected, which alone saved me a few hours.
From reading many threads on stackoverflow i discovered the solution is-
1.Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.storyboard
2.right click on the storyboard -> “open as” -> “Source Code”.
3.Search for targetRuntime="iOS.CocoaTouch"and change it to targetRuntime="iOS.CocoaTouch.iPad"
5.Search for <simulatedScreenMetrics key="destination" type="retina4"/> and change it to to <simulatedScreenMetrics key="destination"/>
4.Now save everything and right click on MainStoryboard_iPad.storyboard “open as” ->"IOS StoryBoard"
5. you may also have to change your constraints.
Thats all you have done.
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
1 - Create your "MainStoryboard_iPad.storyboard";
2 - Right-click on you "MainStoryboard_iPhone.storyboard" and "Open as -> Source Code". Copy everything;
3- Right-click on you "MainStoryboard_iPad.storyboard" and "Open as -> Source Code". Paste everything. Now Search and change:
targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"
4 - Save. Now reopen but using the interface builder. You will only have to re-arrange.
This method can be used for .xib files too
This is going the other way, but I was able to do a select all & copy in my iPad storyboard (~35 scenes) and paste it into my iPhone storyboard. The scene sizes were automatically adjusted. I only saw two problems, I had to replace UISplitViewController (since it's only iPad), and the default background became transparent instead of gray (still working on fixing that properly, without manually setting the background for everything).
EDIT: It seems the default background for UITableView in the Attributes inspector is rather strange. I had to manually set the background to "Group Table View Background Color" for grouped table views, and "White Color" for non-grouped table views. It then was displayed as "Default" (I assume since it then matched a hardcoded value). -- Actually, even easier, changing from "Grouped" to "Static" and back seems to reset the default color.
Here's something that saved me hours and might help those of you with Python skills.
I've been building an app for the last two months, focused on just iPad iterating the UX with the team.
Today focused on building out iPhone version, followed the steps above (thanks!) but I didn't want to then have to resize all the ui elements from iPad dimensions in the visual storyboard editor.
So I wrote this little python jig script to scan through the storyboard file for x, y, width, height and scale everything down by by ratio 320./768. Allowed me then to just focus on fine adjustments.
Copy your iPad storyboard into a new file. (e.g. iPhoneStoryboard.storyboard)
Run the script below with the copied storyboard filename as the first parameter.
Will generate output file with suffix _adjusted.storyboard (e.g. iPhoneStoryboard.storyboard_adjusted.storyboard)
Hope it helps...
import re
import sys
import math
afile = sys.argv[1]
scale = 320./768.
number_pattern = '[-0-9]+(.[0-9]+)?'
#width_pattern = 'width="[-0-9]+( ?px)?"'
width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"'
height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"'
x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"'
y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"'
def replacescaledvalue(scale,pattern,sometext,replacefmt) :
ip = re.search(pattern, sometext, re.IGNORECASE)
if(ip) :
np = re.search(number_pattern,ip.group(0))
if(np) :
val = float(np.group(0))
val = int(math.floor(val*scale))
sval = replacefmt+str(val)+'"'#+'px"'
newtext = re.sub(pattern,sval,sometext)
return newtext
else :
return sometext
fin = open(afile)
fout = open(afile+"_adjusted.storyboard", "wt")
for line in fin:
newline = line
newline = replacescaledvalue(scale,width_pattern,newline,'width="')
newline = replacescaledvalue(scale,height_pattern,newline, 'height="')
newline = replacescaledvalue(scale,x_pattern,newline, 'x="')
newline = replacescaledvalue(scale,y_pattern,newline, 'y="')
# print newline
fout.write( newline )
fin.close()
fout.close()
For Xcode10
Just duplicate Main.storyboard
Then re-name files to Main_iPad.storyboard and Main_iPone.storyboard
Set appropriate names in .plist
4.Just select the proper .storyboard to configure
Go to your Target Summary and change devices to universal,
then go down and set the ipad version to any storyboard you like including a copied and renamed one if you like.
Just as a quick gotcha note to those who may have had my issue with this:
My issue:
The storyboard content copied over nicely to a new board file I added. However, it would not put changes over to my provisioned iPad. Noticing that I had to switch over the designated storyboard for the build target (see image) let the changes show.
I'd post an image if I had the points, but the setting is located in:
Project navigator on the left side source menu, root target of project (center pane) general tab, (second subhead) deployment info, with the iPad button tab selected.
From there, choose your storyboard under "main interface."
Thanks for the post, I hope this mention helps a snag somewhere.
Just for fun, on XCode 5.1 and iOS 7.1 I also needed to change the values of "toolVersion" and "systemVersion" to this:
toolsVersion="5023" systemVersion="13A603"
Without this, the new storyboard file wouldn't compile
Using the XCode6 Size Classes you no longer need to convert the storyboard to iPad.
The same Storyboard can be used for both the iPhone and the iPad, saving you from keeping two files up to date.
The resulting storyboard is compatible with iOS7+.
Read more about this here:
https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1
Use size classes to enable a storyboard or xib file to work with all available screen sizes. This enables the user interface of your app to work on any iOS device.
This functionality is now built-in. For example, if one changes the project settings in Deployment Info -> Devices from iPhone to Universal, the following dialog will show up:
There is a really simple solution for Xcode versions that support size classes (Tested in Xcode 7 which is the current version at the time of writing). Check the "use size classes" checkbox on a storyboard file (File Inspector), confirm that dialog that appears. Then uncheck that same checkbox - Xcode will ask you if you want to use this storyboard with an iPhone or iPad, and convert the screens in it appropriately. No need to directly edit the storyboard file. For both iPad and iPhone, just copy the same storyboard and configure one for iPad and one for iPhone using the described method.
And Before someone suggest to use size classes - while great, they are less convenient for heavily customized UI, such as games etc
I followed this thread when I was hit with the same issue yesterday. The steps I followed
For Xcode 5.1, I had to do some cleanup of iPhone storyboard like missing reuseIdentifiers of Table cells, provide story board id for every controller, remove unused scenes.
Copy MainStoryboard_iPhone.storyboard to MainStoryboard_iPad.storyboard.
Using vi editor - changed targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
Change the code in the MainStoryboard_iPad.storyboard from: <simulatedScreenMetrics key="destination" type="retina4"/> to <simulatedScreenMetrics key="destination"/>
Open the project in Xcode.
Changed the Deployment devices to Universal - Chose the option of NOT copying the iPhone Storyboard.
Xcode will default the Deployment Target to 7.1, took care of the deprecated functions.
To fix the misplaced view error in iPad Storyboard - Changed the Frame Layout for Controllers giving errors.
That was it.. Thanks all for your help..
The easiest and most reliable way to do this is to copy paste from your iPad storyboard.
Create a new storyboard and name it something like MainStoryboard_ipad.
Make your app a Universal app by setting the Devices property to Universal on the Summary page of the Target properties for your project.
Open your iPhone storyboard and select all and copy
Open your iPad storyboard and paste.
You'll have to go about resizing, but it can be faster than recreating the whole storyboard.
A Different Approach
Add an empty-View-Controller with Navigation-Controller in the iPad-Storyboard
Change the Class to the Class of your first ViewController used for iPhone, "fooViewController"
Add the Storyboard-Identifier in the iPhone-Storyboard "fooViewController_storyboard_identifier" for the first ViewController
Go to "fooViewController.m"
Add bool Variable bool nibWasLoadForIpad=false
Go to viewDidLoad-Method
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad)
{
nibWasLoadForIpad=true;
UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:#"Main_iPhone" bundle: nil];
fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:#"fooViewController_storyboard_identifier"];
[self.navigationController pushViewController:controller animated:YES];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
}
(ps. Know problem is that the view-backgrounds will be set to white)
You should create a bug report with Apple. You can say it's a duplicate of mine (10167030) which has been open since September 2011. The frustrating thing from my point of view is that the feature existed in Xcode 3...
Thanks for the answers everybody.
I followed the above steps but when I ran the app under the simulator or my iPad it kept on just using the iPhone storyboard.
For some reason, when I changed the target device to be Universal instead of iPhone, Xcode (v5.0) didn't update the app-Info.plist file to include the iPad storyboard, so I had to manually add the following entry (using the plist editor in Xcode):
Main storyboard file base name (iPad) ==> MainStoryboard_iPad
I just change (additionally to the answer from #tharkay):
<device id="ipad9_7" orientation="landscape">
and works great !
I use this in XCode 8.3.3
In the Xamarin.IOS editor I get this error:
"There was a problem parsing the XML in this document"
System.NullReferenceException: Object reference not set to an instance of an object
at MonoTouch.Design.ProxiedView.set_UseSafeArea (System.Boolean value) [0x00001] in /Users/vsts/agent/2.154.3/work/1/s/Xamarin.Designer.iOS/MonoTouch.Design.Shared/ProxiedView.cs:944
at MonoTouch.Design.ProxiedViewController.UpdateLayoutGuides (MonoTouch.Design.Catalog utilityCatalog, MonoTouch.Design.IosDocument rootModel) [0x002ac] in /Users/vsts/agent/2.154.3/work/1/s/Xamarin.Designer.iOS/MonoTouch.Design.Shared/ProxiedViewController.cs:238
at MonoTouch.Design.Storyboard.UpdateLayoutGuides (MonoTouch.Design.Catalog utilityCatalog) [0x00017] in /Users/vsts/agent/2.154.3/work/1/s/Xamarin.Designer.iOS/MonoTouch.Design.Shared/Storyboard.cs:132
at MonoTouch.Design.Client.IPhoneDesignerSession.LoadXml (System.Func`1[TResult] getDoc, System.Boolean shouldTryUpgrade, System.String fileName) [0x00310] in /Users/vsts/agent/2.154.3/work/1/s/Xamarin.Designer.iOS/MonoTouch.Design.Client/IPhoneDesignerSession.cs:466
I tried disabling things and retracing every step I made doing the storyboard, the only thing that half worked was disabling autolayout, but it destroyed my layout.
The thing is that it works perfect in the app and xcode but in the VS iOS designer it doesn't work, and I need it to add the ids of the components to use them my ViewController, in my project it's the only way to add ids.
I´m lost, if you need any extra info ask me, I pasted the important (or so I think) part of the logs, they were too long.
This is the iPad version of a storyboard that works perfectly, it was based of that storyboard (copied and pasted then edited to fit with iPad)
This is the storyboard: https://pastebin.com/QAHEBne0
The problem with your file was that somehow you have constraints related with the safeArea but it was not turn on in the file.
I fix it when I open the file in my Xcode and just turn in on(check the image)
the result is useSafeAreas="YES" added to document tag on the second row in your xml
Please, check your constraints carefully it is possible some of them to be broken or deleted.
After updating my xCode to 8.0 and run my application on my device, i've noticed that my collection view in the storyboard is messed and the frame isn't fitting the view anymore.
This is happening only if i opened the storyboard(It seems that the xcode is adding some properties after the first time I opened the file in xcode).
When I replace the storyboard with my old one then build the app without opening it everything worked as expected.
After hours of searching what may be the reason and comparing the storyboards source codes (between the old one and the new one after opening it), I have found that the reason is the toolsVersion property found at the top of the storyboard source code.
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0"
toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch"
propertyAccessControl="none" useAutolayout="YES" colorMatched="YES"
initialViewController="wZn-Em-z41">
When I replace toolsVersion="11201" with toolsVersion="10116" then everything works again normally.
How can I force the tools version to a value? and what is this property and why it is messing up my constraints and frames.
Appreciate any information about this issue.
The problem here is that, with toolsVersion 11201 (Xcode 8), it seems that views that have fully qualified constraints no longer have frames specified in the storyboard (since the constraints will determine the frame at runtime).
So you can't rely on the frame until the constraints have been evaluated (i.e. don't use frames in viewDidLoad or viewWillAppear). Once the constraints have been evaluated, the frame seems to be fine. Before they have been evaluated, the frame seems to be reported as 1000 x 1000 (at least, that's what it was for me in various cases).
So there are two solutions: 1) Make an outlet to your constraints and use that instead of relying on the frame, or 2) use the frame after the constraints have been evaluated (for example, in the viewDidAppear method).
Since xcode 6 didn't offer an empty application any more, I manually created one by deleting the Launch screen interface file and the Main storyboard file base name in the info.plist file, and deleted Main.storyboard and LaunchScreen.xib then. Considering that I'll drawing the UI by myself, I created a view controller without an xib file. But when I ran the app, there are black bars both on the top and the bottom. I checked the [[UIScreen mainScreen]bounds] and found out that the bounds was 480*320.
I've checked on google and there were suggestions like adding png pictures or creating a xib file, but I really wonder why the property bounds didn't get the right size.
I have met with this problem, it's because you delete your "Launch screen file" and didn't set in general tab "Launch image source".
So you need to make .xcassets file, after right click inside .xcassets file you create "New Launch Image" with name something like "LaunchImage" and set images for appropriate sizes. After that in general tab you set "Launch image source" property name with your "LaunchImage".
Step 1:
Step 2:
Step 3:
A better approach would be to keep the storyboard and everything else Xcode sets up for a single-view app, and then build out your UI programmaticly from the ViewController. That way, you inherit all the automagic stuff the SDK does during startup.
I can't tell you exactly what this automagic stuff is; but, I'm pretty sure your bug would go away if you adopted this approach.
I have an iPhone application which has a storyboard. Now I want to provide an iPad application too. So I asked me whether there is a function which helps me convert my iPhone storyboard to an iPad storyboard.
To be specific:
Is there a similar function or is there only the manual way ?
I found out a kind of solution:
Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.storyboard
Close Xcode and then open this file any text editor.
Search for targetRuntime="iOS.CocoaTouch"and change it to targetRuntime="iOS.CocoaTouch.iPad"
Change the code in the MainStoryboard_iPad.storyboard from:
<simulatedScreenMetrics key="destination" type="retina4"/> to
<simulatedScreenMetrics key="destination"/>
Now save everything and reopen Xcode. The iPad-Storyboard has the same contents as the iPhone-file but everyting could be disarranged.
This saved me hours - hopefully this will help you
If you had created a universal project, by default empty iPad storyboard would have been created, you just have to select iPhone storyboard select all (Command+A), copy (Command+C) and paste it on iPad storyboard. Make sure to move the entry point from the empty storyboard to newly copied storyboard before compiling.
That didn't quite work for me. I did something a little bit different.
Create a new story board file for the iPad version
Open both the new file and the file i want to copy in textwrangler (text editor)
Copied the xml text from old file to the new file between these xml tags
First Tag <scenes> <!--Contents View Controller-->
Paste Here
End Tags </class> </classes>
That worked for me. I got a new layoutout with all my outlets connected, which alone saved me a few hours.
From reading many threads on stackoverflow i discovered the solution is-
1.Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.storyboard
2.right click on the storyboard -> “open as” -> “Source Code”.
3.Search for targetRuntime="iOS.CocoaTouch"and change it to targetRuntime="iOS.CocoaTouch.iPad"
5.Search for <simulatedScreenMetrics key="destination" type="retina4"/> and change it to to <simulatedScreenMetrics key="destination"/>
4.Now save everything and right click on MainStoryboard_iPad.storyboard “open as” ->"IOS StoryBoard"
5. you may also have to change your constraints.
Thats all you have done.
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
1 - Create your "MainStoryboard_iPad.storyboard";
2 - Right-click on you "MainStoryboard_iPhone.storyboard" and "Open as -> Source Code". Copy everything;
3- Right-click on you "MainStoryboard_iPad.storyboard" and "Open as -> Source Code". Paste everything. Now Search and change:
targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"
4 - Save. Now reopen but using the interface builder. You will only have to re-arrange.
This method can be used for .xib files too
This is going the other way, but I was able to do a select all & copy in my iPad storyboard (~35 scenes) and paste it into my iPhone storyboard. The scene sizes were automatically adjusted. I only saw two problems, I had to replace UISplitViewController (since it's only iPad), and the default background became transparent instead of gray (still working on fixing that properly, without manually setting the background for everything).
EDIT: It seems the default background for UITableView in the Attributes inspector is rather strange. I had to manually set the background to "Group Table View Background Color" for grouped table views, and "White Color" for non-grouped table views. It then was displayed as "Default" (I assume since it then matched a hardcoded value). -- Actually, even easier, changing from "Grouped" to "Static" and back seems to reset the default color.
Here's something that saved me hours and might help those of you with Python skills.
I've been building an app for the last two months, focused on just iPad iterating the UX with the team.
Today focused on building out iPhone version, followed the steps above (thanks!) but I didn't want to then have to resize all the ui elements from iPad dimensions in the visual storyboard editor.
So I wrote this little python jig script to scan through the storyboard file for x, y, width, height and scale everything down by by ratio 320./768. Allowed me then to just focus on fine adjustments.
Copy your iPad storyboard into a new file. (e.g. iPhoneStoryboard.storyboard)
Run the script below with the copied storyboard filename as the first parameter.
Will generate output file with suffix _adjusted.storyboard (e.g. iPhoneStoryboard.storyboard_adjusted.storyboard)
Hope it helps...
import re
import sys
import math
afile = sys.argv[1]
scale = 320./768.
number_pattern = '[-0-9]+(.[0-9]+)?'
#width_pattern = 'width="[-0-9]+( ?px)?"'
width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"'
height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"'
x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"'
y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"'
def replacescaledvalue(scale,pattern,sometext,replacefmt) :
ip = re.search(pattern, sometext, re.IGNORECASE)
if(ip) :
np = re.search(number_pattern,ip.group(0))
if(np) :
val = float(np.group(0))
val = int(math.floor(val*scale))
sval = replacefmt+str(val)+'"'#+'px"'
newtext = re.sub(pattern,sval,sometext)
return newtext
else :
return sometext
fin = open(afile)
fout = open(afile+"_adjusted.storyboard", "wt")
for line in fin:
newline = line
newline = replacescaledvalue(scale,width_pattern,newline,'width="')
newline = replacescaledvalue(scale,height_pattern,newline, 'height="')
newline = replacescaledvalue(scale,x_pattern,newline, 'x="')
newline = replacescaledvalue(scale,y_pattern,newline, 'y="')
# print newline
fout.write( newline )
fin.close()
fout.close()
For Xcode10
Just duplicate Main.storyboard
Then re-name files to Main_iPad.storyboard and Main_iPone.storyboard
Set appropriate names in .plist
4.Just select the proper .storyboard to configure
Go to your Target Summary and change devices to universal,
then go down and set the ipad version to any storyboard you like including a copied and renamed one if you like.
Just as a quick gotcha note to those who may have had my issue with this:
My issue:
The storyboard content copied over nicely to a new board file I added. However, it would not put changes over to my provisioned iPad. Noticing that I had to switch over the designated storyboard for the build target (see image) let the changes show.
I'd post an image if I had the points, but the setting is located in:
Project navigator on the left side source menu, root target of project (center pane) general tab, (second subhead) deployment info, with the iPad button tab selected.
From there, choose your storyboard under "main interface."
Thanks for the post, I hope this mention helps a snag somewhere.
Just for fun, on XCode 5.1 and iOS 7.1 I also needed to change the values of "toolVersion" and "systemVersion" to this:
toolsVersion="5023" systemVersion="13A603"
Without this, the new storyboard file wouldn't compile
Using the XCode6 Size Classes you no longer need to convert the storyboard to iPad.
The same Storyboard can be used for both the iPhone and the iPad, saving you from keeping two files up to date.
The resulting storyboard is compatible with iOS7+.
Read more about this here:
https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1
Use size classes to enable a storyboard or xib file to work with all available screen sizes. This enables the user interface of your app to work on any iOS device.
This functionality is now built-in. For example, if one changes the project settings in Deployment Info -> Devices from iPhone to Universal, the following dialog will show up:
There is a really simple solution for Xcode versions that support size classes (Tested in Xcode 7 which is the current version at the time of writing). Check the "use size classes" checkbox on a storyboard file (File Inspector), confirm that dialog that appears. Then uncheck that same checkbox - Xcode will ask you if you want to use this storyboard with an iPhone or iPad, and convert the screens in it appropriately. No need to directly edit the storyboard file. For both iPad and iPhone, just copy the same storyboard and configure one for iPad and one for iPhone using the described method.
And Before someone suggest to use size classes - while great, they are less convenient for heavily customized UI, such as games etc
I followed this thread when I was hit with the same issue yesterday. The steps I followed
For Xcode 5.1, I had to do some cleanup of iPhone storyboard like missing reuseIdentifiers of Table cells, provide story board id for every controller, remove unused scenes.
Copy MainStoryboard_iPhone.storyboard to MainStoryboard_iPad.storyboard.
Using vi editor - changed targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
Change the code in the MainStoryboard_iPad.storyboard from: <simulatedScreenMetrics key="destination" type="retina4"/> to <simulatedScreenMetrics key="destination"/>
Open the project in Xcode.
Changed the Deployment devices to Universal - Chose the option of NOT copying the iPhone Storyboard.
Xcode will default the Deployment Target to 7.1, took care of the deprecated functions.
To fix the misplaced view error in iPad Storyboard - Changed the Frame Layout for Controllers giving errors.
That was it.. Thanks all for your help..
The easiest and most reliable way to do this is to copy paste from your iPad storyboard.
Create a new storyboard and name it something like MainStoryboard_ipad.
Make your app a Universal app by setting the Devices property to Universal on the Summary page of the Target properties for your project.
Open your iPhone storyboard and select all and copy
Open your iPad storyboard and paste.
You'll have to go about resizing, but it can be faster than recreating the whole storyboard.
A Different Approach
Add an empty-View-Controller with Navigation-Controller in the iPad-Storyboard
Change the Class to the Class of your first ViewController used for iPhone, "fooViewController"
Add the Storyboard-Identifier in the iPhone-Storyboard "fooViewController_storyboard_identifier" for the first ViewController
Go to "fooViewController.m"
Add bool Variable bool nibWasLoadForIpad=false
Go to viewDidLoad-Method
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad)
{
nibWasLoadForIpad=true;
UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:#"Main_iPhone" bundle: nil];
fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:#"fooViewController_storyboard_identifier"];
[self.navigationController pushViewController:controller animated:YES];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
}
(ps. Know problem is that the view-backgrounds will be set to white)
You should create a bug report with Apple. You can say it's a duplicate of mine (10167030) which has been open since September 2011. The frustrating thing from my point of view is that the feature existed in Xcode 3...
Thanks for the answers everybody.
I followed the above steps but when I ran the app under the simulator or my iPad it kept on just using the iPhone storyboard.
For some reason, when I changed the target device to be Universal instead of iPhone, Xcode (v5.0) didn't update the app-Info.plist file to include the iPad storyboard, so I had to manually add the following entry (using the plist editor in Xcode):
Main storyboard file base name (iPad) ==> MainStoryboard_iPad
I just change (additionally to the answer from #tharkay):
<device id="ipad9_7" orientation="landscape">
and works great !
I use this in XCode 8.3.3