Converting iPhone xib to iPad xib?

IosIphoneXcodeIpadXib

Ios Problem Overview


How do you do it? I saw one video tutorial on it, but the screen was too small. Also, other than changing the view size, are there any other major changes I would have to make to my iphone apps to convert to iPad?

Ios Solutions


Solution 1 - Ios

I was able to narrow it down to a few things, so here are the steps that worked for me:

  1. Make a copy of the iPhone xib file and add it to your project

  2. Right click the file (in xcode) and Open As > Source Code

  3. The 2nd line should look like:

Replace with:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">

4) Search for "IBCocoaTouchFramework" and Replace all occurrences with "IBIPadFramework"

  1. Save the file and Open As > Interface Builder - iOS

The file might still look like a regular iPhone xib, but for me, once I changed the Status Bar to "Black" in the Attributes inspector the rest of the xib just kind of "snapped" into an iPad xib

Solution 2 - Ios

In Xcode 5 you should just:

Find:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">

Replace by:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">

Note we are just adding .iPad to the type and targetRuntime properties.

After opening just select a new Size to adjust. Example: iPad Full Screen.

Solution 3 - Ios

Assume you've the SDK with Xcode 3,

  1. Open IB.
  2. Open the XIB.
  3. File -> Create iPad version using autoresizing masks.

Solution 4 - Ios

XCode4:

In xcode 4 we can't do that for a single xib,but we can create respective ipad versions all at once.

Before configuring your project to ipad,when it is configured only for iphone, right click on target and click on duplicate.

Now select "duplicate and transition to ipad".A new target and new set of xibs are created.It should reduce some work.

Hope it helps.

Solution 5 - Ios

Xcode 4:

The Create iPad Version Using Autosizing Masks feature has been removed from Xcode 4. Right now the easiest way is to use Xcode 3 for the conversion, since the nib (.xib) file format did not change.

Xcode 3 & 4 can now be both installed on the same system by simply selecting a different folder (see installation instructions on the disk image).

Otherwise you will need to copy/paste the UI elements from the iPhone version, and re-link them to your code.

Solution 6 - Ios

What about letting the computer do computer's job?
Faster, less risk of errors.

Here is a workflow based on the excellent answer from Jag, but automated with sed.

First, let's setup some stuff. We will only need to do this once.
In the directory that contains your XIBs, create two files with the following content:

File iPhoneToiPadXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.XIB/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g
s/IBCocoaTouchFramework/IBIPadFramework/g

and file iPadToiPhoneXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/com.apple.InterfaceBuilder3.CocoaTouch.XIB/g
s/IBIPadFramework/IBCocoaTouchFramework/g


Setup is now finished. To convert a XIB, enter one of the two following commands in the terminal:

iPhone to iPad conversion:

sed -f iPhoneToiPadXIBConversion.sed  MyViewController~iphone.xib  > MyViewController.xib

iPad to iPhone conversion:

sed -f iPadToiPhoneXIBConversion.sed  MyViewController.xib  > MyViewController~iphone.xib





Just for the fun, let's create two function in zsh, to make the conversion even more simple:

function convertiPadXIBToiPhone () {
	newXibName=`echo "$1" | /usr/bin/sed "s/.xib/~iphone.xib/"`
	`/usr/bin/sed -f iPadToiPhoneXIBConversion.sed "$1" > "$newXibName"`
	echo "Did convert $1 to $newXibName."
}

function convertiPhoneXIBToiPad () {
	newXibName=`echo "$1" | /usr/bin/sed "s/~iphone.xib/.xib/"`
	`/usr/bin/sed -f iPhoneToiPadXIBConversion.sed "$1" > "$newXibName"`
	echo "Did convert $1 to $newXibName."
}

After having added this to your zsh config, converting a XIB is a simple as:

convertiPadXIBToiPhone MyViewController.xib

or

convertiPhoneXIBToiPad MyViewController.xib

Solution 7 - Ios

Open up the XIB in XCode 4 using "view as source code."

Before
Back up the nib in question.

One
Substitute this goo

	<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
	<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
		<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
		<integer value="1056" key="NS.object.0"/>
	</object>
	<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
		<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
		<integer value="3100" key="NS.object.0"/>
	</object>
	<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
	<int key="IBDocument.defaultPropertyAccessControl">3</int>
	<string key="IBCocoaTouchPluginVersion">301</string>

for this other goo

	<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
	<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
		<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
		<integer value="3100" key="NS.object.0"/>
	</object>
	<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
	<int key="IBDocument.defaultPropertyAccessControl">3</int>
	<string key="IBCocoaTouchPluginVersion">301</string>

Two
Then, for each view in the nib using the integrated IB, delete it and then hit undo.

Three
Then shower in hot water to wipe off that disgusting feeling you might have.

Solution 8 - Ios

You can open the XIB as textfile and change the UIView size:

Right click on your XIB file in de navigator and select: "open as..." Open as source file.

Find the UIView reference and change the Frame values:

<object class="IBUIView" id="191373211">

<string key="NSFrame">{{0, 20}, {768, 1024}}</string>

Solution 9 - Ios

In XCode 4.3.2, the easiest way for me to create iPad version of xib is duplicating that xib file and add ~ipad suffix to the filename. And add both "myVC.xib" and "myVC~ipad.xib" into your project. Note that it is "~ipad" NOT "~iPad". Your app will use that ~ipad version automatically when run on iPad. This also works with resource files (e.g. images).

The best reference I could find at the moment... https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html

Solution 10 - Ios

Xcode 5 update > targetRuntime="iOS.CocoaTouch"

to > targetRuntime="iOS.CocoaTouch.iPad"

Solution 11 - Ios

I will document what I did in Xcode 4.5:

  1. fixpattern.sh

     cp REPLACEME_Iphone.h REPLACEME_Ipad.h
     sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.h > REPLACEME_Ipad_tmp.h
     mv REPLACEME_Ipad_tmp.h REPLACEME_Ipad.h
     cp REPLACEME_Iphone.m REPLACEME_Ipad.m
     sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.m > REPLACEME_Ipad_tmp.m
     mv REPLACEME_Ipad_tmp.m REPLACEME_Ipad.m
     cp REPLACEME_Iphone.xib REPLACEME_Ipad.xib
     sed -e 's/com.apple.InterfaceBuilder3.CocoaTouch.XIB   /com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
     mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
     sed -e 's/IBCocoaTouchFramework/IBIPadFramework/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
     mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
     sed -e 's/320, 416/768, 1004/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
     mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
     sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
     mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    
  2. Create a list of file you want to convert in fixfile, each line will be a file name without extension. If you original file name is AAA_Iphone.h, just put AAA. If your original file is not of this pattern, you need to revise the script.

  3. Run in command line

     cat fixfile | while read line ; do sed -e "s/REPLACEME/${line}/g" fixpattern.sh ; done > fixall.sh
    
  4. Review and run fixall.sh

  5. Add newly created file into project

Solution 12 - Ios

Jag's answer is great. But there is a catch if an XIB is opened/ created in Xcode 5.

For Xcode 5

  1. Make a copy of the iPhone xib file and add it to your project

  2. Right click the file (in xcode) and Open As > Source Code

  3. The 2nd line should look like:

change it to

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510"

4) 8th line should look like this:

<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>

change it to

<rect key="frame" x="0.0" y="64" width="768" height="960"/>

That's it and there you have iPad XIB. But still the real credit goes to Jag.

Solution 13 - Ios

In addition to answer given by Jag also search for "320,460" and replace it with 768,1024 and your XIB will be resized to iPad dimensions.

Solution 14 - Ios

For Xcode 4,

You need not create separate target for each device. Instead, you can change the Devices in project summary to Universal which would be in iPhone already. This is answered in the link Updating iOS 5 App to Universal on Xcode 4.2. Thus, it will do transition for you.

Solution 15 - Ios

Sounds like the best solution is to always develop as iphone first, then once you are complete done, add the ipad target, letting xcode do the update. I made the same mistake, selected universal to start, which creates the first few files, but then every other xib had to be hand recreated in the ipad folder. Big PAIN

Solution 16 - Ios

Jag has given Great Answer.

In Some Cases.

> No need to convert your Iphone XIB in Ipad XIB . You can Use Autoresizingmask > and get Running Ipad also. just need to configure your APP for running > in Universal mode with proper autoresizingmask.

Solution 17 - Ios

Just replace

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch"

with

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch.iPad"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNextRevView Question on Stackoverflow
Solution 1 - IosJagView Answer on Stackoverflow
Solution 2 - IosSebastianViewView Answer on Stackoverflow
Solution 3 - IoskennytmView Answer on Stackoverflow
Solution 4 - IosTejesh AlimilliView Answer on Stackoverflow
Solution 5 - IosantalkerekesView Answer on Stackoverflow
Solution 6 - IosGuillaumeView Answer on Stackoverflow
Solution 7 - IosDan RosenstarkView Answer on Stackoverflow
Solution 8 - IoswasighView Answer on Stackoverflow
Solution 9 - IosHlungView Answer on Stackoverflow
Solution 10 - Ios0oneoView Answer on Stackoverflow
Solution 11 - Iosuser2329407View Answer on Stackoverflow
Solution 12 - IosEvol GateView Answer on Stackoverflow
Solution 13 - IosFarooq Nasim AhmadView Answer on Stackoverflow
Solution 14 - IosaparnaView Answer on Stackoverflow
Solution 15 - IosnwestwoodView Answer on Stackoverflow
Solution 16 - Ioskalpesh jetaniView Answer on Stackoverflow
Solution 17 - IosTony PhamView Answer on Stackoverflow