Конвертировать iPhone xib в iPad xib?

Как ты это делаешь? Я видел по нему один видеоурок, но экран был слишком маленьким. Кроме того, помимо изменения размера представления, есть ли какие-либо другие важные изменения, которые мне нужно было бы внести в свои приложения для iphone, чтобы преобразовать их в iPad?


person NextRev    schedule 21.03.2010    source источник


Ответы (17)


Предположим, у вас есть SDK с Xcode 3,

  1. Откройте IB.
  2. Откройте XIB.
  3. Файл -> Создать версию для iPad с использованием масок с автоизменением размеров.
person kennytm    schedule 21.03.2010
comment
Какие отличия можно ожидать? - person pestilence669; 22.03.2010
comment
Эээ ... кроме того, что больше нет Interface Builder, и нет эквивалентной опции в XCode 4, которую я могу найти. - person Nicholas M T Elliott; 22.03.2011
comment
Я искал все это решение в Xcode 4, мне пришлось перестроить свой XIB как iPad с нуля, чтобы решить эту проблему до сих пор, что не может быть правильным. - person Peter Johnson; 27.03.2011
comment
@Peter Johnson, @radven, @Nicholas M T Elliot, введите ниже ответ, который действительно работает (хотя и не очень) для XCode 4. - person Dan Rosenstark; 04.07.2011
comment
Одна вещь, которая может помочь - если вы отключите моделируемые элементы интерфейса, вы сможете свободно изменять размер своего представления. - person Peter Johnson; 22.07.2011
comment
Я обнаружил, что выбор с использованием масок с автоизменением размеров просто увеличивал масштаб всего (без сохранения соотношения сторон) и в конечном итоге мне приходилось изменять размер представления, как только я открывал его в Xcode 4. Выбор другого варианта мог сделать то, что я хотел, без дополнительной работы. - person Thom Mahoney; 16.08.2011

Я смог сузить круг вопросов до нескольких вещей, поэтому вот шаги, которые у меня сработали:

1) Сделайте копию xib-файла iPhone и добавьте ее в свой проект.

2) Щелкните правой кнопкой мыши файл (в xcode) и выберите Открыть как> Исходный код.

3) Вторая строка должна выглядеть так:

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

Заменить:

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

4) Найдите «IBCocoaTouchFramework» и замените все вхождения на «IBIPadFramework».

5) Сохраните файл и откройте как> Интерфейсный разработчик - iOS

Файл может по-прежнему выглядеть как обычный iPhone xib, но для меня, как только я изменил строку состояния на «черный» в инспекторе атрибутов, остальная часть xib просто как бы «привязана» к iPad xib

person Jag    schedule 18.10.2011
comment
Работал. Моя строка состояния уже была черной. Я установил для него значение «Нет» и снова стал черным, затем он переключился на представление iPad. - person Thomas; 25.10.2011
comment
Потрясающий. Окончательный ответ для Xcode 4. Тот, который получил все положительные голоса, устарел :) - person Chris Newman; 28.10.2011
comment
Отлично! Без этого потребовались бы часы, чтобы воссоздать привязки между моими gfx-компонентами и их выходами в контроллерах. Большое спасибо! - person tommys; 18.02.2012
comment
Я просто хочу добавить, что этот ответ работает в Xcode 4.2. Спасибо - person jsherk; 02.04.2012
comment
Как и следовало ожидать, этот метод работает и наоборот, для случаев, когда вы сначала создали ресурс iPad и хотите вернуться к ресурсу iPhone. - person chrisbtoo; 29.05.2012
comment
Если вам нужен автоматизированный рабочий процесс, основанный на этом замечательном ответе, я вам помогу: stackoverflow.com/a/12741197/272342 - person Guillaume; 05.10.2012
comment
Если устройство не меняется в вашем наконечнике после этого, возможно, у вас был выбран размер в инспекторе атрибутов как «Свободная форма». Если вы переключитесь на полноэкранный режим iPad, он станет iPad - person corbin; 01.02.2013
comment
спасибо jag, это действительно экономия времени для всех разработчиков. Если вы поддерживаете правильную маску автоизменения, это будет потрясающе. и действительно отличный ответ. - person kalpesh jetani; 01.03.2013
comment
Обратите внимание, что в последней версии XCode5 это немного изменилось. Вместо того, чтобы искать IBCocoaTouchFramework на шаге 4, найдите iOS.CocoaTouch и просто добавьте .iPad в конец. Есть только одно вхождение, и оно находится в той же строке, что и первое редактирование. Также обратите внимание, что когда вы открываете это в IB, просто поменяйте его на Портрет или Пейзаж (что бы там ни было) и обратно, и размер будет изменен нормально. - person MajorHavoc; 14.11.2013

В Xcode 5 вам нужно просто:

Находить:

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

Заменить на:

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

Обратите внимание, что мы просто добавляем .iPad к свойствам type и targetRuntime.

После открытия просто выберите новый размер для настройки. Пример: полноэкранный режим iPad.

person SebastianView    schedule 28.09.2013
comment
Небольшая опечатка: нужно искать <...type="com.apple.InterfaceBuilder3.CocoaTouch.XIB"...>. - person Julian D.; 30.09.2013

XCode4:

В xcode 4 мы не можем сделать это для одного xib, но мы можем создать соответствующие версии ipad сразу.

Перед настройкой проекта на ipad, если он настроен только для iphone, щелкните правой кнопкой мыши цель и выберите дубликат.

Теперь выберите «дублировать и перейти на ipad». Создается новая цель и новый набор xib-файлов. Это должно сократить некоторые объемы работы.

Надеюсь, поможет.

person Tejesh Alimilli    schedule 04.06.2011
comment
это сэкономило мне много времени ... Это правильный ответ на этот вопрос :) - person Guru; 22.05.2013
comment
К сожалению, это не работает в Xcode 5.1, он создает новую цель для iPad, но не переносит xib. Я даже попытался создать новый проект и скопировать раскадровку в Main.storyboard, затем скопировать цель на iPad, но он по-прежнему не генерирует xib. По какой-то причине Interface Builder из Xcode 3 больше не открывается в 10.9, поэтому я вынужден редактировать текст xib напрямую. - person Zack Morris; 19.03.2014
comment
P.S. этот ответ лучше всего работал у меня в Xcode 5 (возможно, также и в 4), потому что он автоматически изменял размер макета по большей части: http://stackoverflow.com/a/8694985/539149 - person Zack Morris; 19.03.2014

Xcode 4:

Функция Создание версии iPad с использованием масок автоматического изменения размера была удалена из Xcode 4. На данный момент самый простой способ - использовать Xcode 3 для преобразования, поскольку формат файла пера (.xib) не изменился.

Xcode 3 и 4 теперь могут быть установлены в одной системе, просто выбрав другую папку (см. Инструкции по установке на образе диска).

В противном случае вам нужно будет скопировать / вставить элементы пользовательского интерфейса из версии для iPhone и повторно связать их со своим кодом.

person antalkerekes    schedule 03.04.2011
comment
Хотел бы я, чтобы мне разрешили разглагольствовать об этой бета-ОС вместе с этой бета-IDE :( - person JustSid; 04.06.2011
comment
В Xcode 4 есть способ сделать это. См. Ответ Теджеша на этой же странице. - person Marc M; 02.09.2011

Как насчет того, чтобы позволить компьютеру выполнять его работу?
Быстрее, меньше риск ошибок.

Вот рабочий процесс, основанный на отличном ответе от Jag, но автоматизированный с помощью sed.

Во-первых, давайте настроим кое-что. Нам нужно будет сделать это только один раз.
В каталоге, содержащем ваши XIB, создайте два файла со следующим содержимым:

Файл iPhoneToiPadXIBConversion.sed:

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

и файл iPadToiPhoneXIBConversion.sed:

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


Установка завершена. Чтобы преобразовать XIB, введите в терминал одну из двух следующих команд:

Преобразование iPhone в iPad:

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

Преобразование iPad в iPhone:

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





Ради удовольствия, давайте создадим в zsh две функции, чтобы упростить преобразование:

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."
}

После добавления этого файла в конфигурацию zsh преобразование XIB выполняется просто:

convertiPadXIBToiPhone MyViewController.xib

or

convertiPhoneXIBToiPad MyViewController.xib
person Guillaume    schedule 05.10.2012
comment
Почти так же хорошо, как когда это было встроено в XCode 3. :-) - person Warren P; 25.02.2013
comment
:) Эй, я бы хотел, чтобы этот хак стал бесполезным из-за новой функции в следующей версии Xcode. В ожидании этого я использую его каждый раз, когда мне нужно преобразовать XIB, и он отлично работает! - person Guillaume; 26.02.2013

Откройте XIB в XCode 4, используя «просмотр как исходный код».

До

Сделайте резервную копию рассматриваемого пера.

Один

Замени эту слизь

    <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>

для этой другой слизи

    <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>

Два

Затем для каждого представления в пере с использованием встроенного IB удалите его и нажмите «Отменить».

Три

Затем примите душ с горячей водой, чтобы избавиться от этого отвратительного чувства.

person Dan Rosenstark    schedule 04.07.2011
comment
Примечание: код взят непосредственно из NIB, которые 1) сломаны и 2) работают. - person Dan Rosenstark; 12.09.2011

Вы можете открыть XIB как текстовый файл и изменить размер UIView:

Щелкните правой кнопкой мыши файл XIB в навигаторе и выберите: «Открыть как ...» Открыть как исходный файл.

Найдите ссылку UIView и измените значения Frame:

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

<string key="NSFrame">{{0, 20}, {768, 1024}}</string>
person wasigh    schedule 30.05.2011
comment
Хм, я вижу NSFrameSize, но не NSFrame там ... Кто-нибудь может подтвердить? - person Peter Johnson; 09.06.2011
comment
То же самое и здесь, я изменил NSFrameSize, и это имеет эффект, но если я хочу редактировать пользовательский интерфейс в Xcode, я все равно вижу маленький экран. - person DixieFlatline; 29.08.2011

В XCode 4.3.2 для меня самый простой способ создать версию xib для iPad - это дублировать этот файл xib и добавить суффикс ~ipad к имени файла. И добавьте в свой проект оба файла: myVC.xib и myVC ~ ipad.xib. Обратите внимание, что это «~ ipad» НЕ «~ iPad». Ваше приложение будет использовать эту версию ~ ipad автоматически при запуске на iPad. Это также работает с файлами ресурсов (например, изображениями).

Лучшая справочная информация, которую я смог найти на данный момент ... https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html

person Hlung    schedule 27.04.2012
comment
Я слышал, что у этого (автоматический выбор файла на ~ iPad) проблема со старыми iOS. - person karim; 08.02.2013
comment
Да, но это типичная вещь для новых функций. Однако не могу найти хорошего документа по этому поводу. Но я почти уверен, что он работает с iOS 5 и выше, и этого должно быть достаточно. - person Hlung; 21.02.2013
comment
Странно, что Apple до сих пор использует [[UIDevice currentDevice] userInterfaceIdiom] в своем универсальном шаблоне приложения. - person Timur Kuchkarov; 01.03.2013

Обновление Xcode 5

targetRuntime = "iOS.CocoaTouch"

to

targetRuntime = "iOS.CocoaTouch.iPad"

person 0oneo    schedule 01.05.2014

Я задокументирую то, что сделал в 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. Создайте список файлов, которые вы хотите преобразовать, в fixfile, в каждой строке будет имя файла без расширения. Если исходное имя файла AAA_Iphone.h, просто введите AAA. Если ваш исходный файл не соответствует этому шаблону, вам необходимо отредактировать сценарий.

  3. Запустить в командной строке

    cat fixfile | while read line ; do sed -e "s/REPLACEME/${line}/g" fixpattern.sh ; done > fixall.sh
    
  4. Просмотрите и запустите fixall.sh

  5. Добавить вновь созданный файл в проект

person user2329407    schedule 28.04.2013

Ответ Джага отличный. Но есть загвоздка, если XIB открывается / создается в Xcode 5.

Для Xcode 5

1) Сделайте копию xib-файла iPhone и добавьте ее в свой проект.

2) Щелкните правой кнопкой мыши файл (в xcode) и выберите Открыть как> Исходный код.

3) Вторая строка должна выглядеть так:

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

измените это на

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

4) 8-я строка должна выглядеть так:

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

измените это на

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

Вот и все, и у вас есть iPad XIB. Но все же настоящая заслуга принадлежит Jag.

person Evol Gate    schedule 01.11.2013

В дополнение к ответу, данному Джагом, также выполните поиск «320 460» и замените его на 768 1024, и размер вашего XIB будет изменен до размеров iPad.

person Farooq Nasim Ahmad    schedule 18.09.2012

Для Xcode 4,

Вам не нужно создавать отдельную цель для каждого устройства. Вместо этого вы можете изменить «Устройства» в сводке проекта на «Универсальные», которые уже есть в iPhone. Ответ на этот вопрос можно найти в ссылке Обновление приложения iOS 5 до универсального в Xcode 4.2. Таким образом, он сделает переход за вас.

person aparna    schedule 05.04.2013

Похоже, лучшее решение - всегда сначала разрабатывать как iphone, а затем, когда вы закончите, добавьте цель ipad, позволяя xcode выполнять обновление. Я совершил ту же ошибку, выбрав универсальный для запуска, который создает первые несколько файлов, но затем все остальные xib-файлы приходилось вручную воссоздавать в папке ipad. БОЛЬШАЯ БОЛЬ

person nwestwood    schedule 24.09.2011

Jag has given Great Answer.

В некоторых случаях.

Нет необходимости конвертировать ваш Iphone XIB в Ipad XIB. Вы также можете использовать маску автоматического изменения размера и запустить Ipad. просто нужно настроить приложение для работы в универсальном режиме с правильной маской автоизменения.

person kalpesh jetani    schedule 01.03.2013

Просто замените

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

с участием

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch.iPad"
person Tony Pham    schedule 15.08.2019