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

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


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


Ответы (17)


arrow_upward
29
arrow_downward

Предположим, у вас есть 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

arrow_upward
159
arrow_downward

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

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

arrow_upward
33
arrow_downward

В 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

arrow_upward
22
arrow_downward

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

arrow_upward
14
arrow_downward

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

arrow_upward
6
arrow_downward

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

Вот рабочий процесс, основанный на отличном ответе от 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

arrow_upward
5
arrow_downward

Откройте 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

arrow_upward
4
arrow_downward

Вы можете открыть 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

arrow_upward
3
arrow_downward

В 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

arrow_upward
3
arrow_downward

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

targetRuntime = "iOS.CocoaTouch"

to

targetRuntime = "iOS.CocoaTouch.iPad"

person 0oneo    schedule 01.05.2014

arrow_upward
2
arrow_downward

Я задокументирую то, что сделал в 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

arrow_upward
2
arrow_downward

Ответ Джага отличный. Но есть загвоздка, если 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

arrow_upward
1
arrow_downward

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

person Farooq Nasim Ahmad    schedule 18.09.2012

arrow_upward
1
arrow_downward

Для Xcode 4,

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

person aparna    schedule 05.04.2013

arrow_upward
0
arrow_downward

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

person nwestwood    schedule 24.09.2011

arrow_upward
0
arrow_downward

Jag has given Great Answer.

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

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

person kalpesh jetani    schedule 01.03.2013

arrow_upward
0
arrow_downward

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

<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