Запуск симулятора RETINA из Xcodebuild для непрерывной интеграции - PullRequest
4 голосов
/ 06 марта 2012

Я запускаю автоматические модульные тесты приложений в среде CI для приложений iPhone, и все отлично работает с помощью командной строки, такой как;

xcodebuild -scheme "Tests" -configuration Debug -sdk iphonesimulator5.0

Это здорово, но теперь я хочу заставить симулятор iPhoneзапускать в режиме Retina, а не в стандартном режиме по умолчанию.

Я знаю, что могу переключать это с помощью опции аппаратного меню, однако я запускаю это на сервере безголовой интеграции, поэтому у меня нет этой опции.

То, что я хотел бы сделать, это передать ключ в командной строке, который говорит симулятору запускаться в режиме Retina.

Я оптимистично попытался добавить SimulateDevice = "iPhone (Retina)" к команде xcodebuild, но, похоже, это не работает.

Возможно ли это?Кажется, сейчас я не могу найти способ.

Если это невозможно, есть ли альтернативный подход, который я могу использовать?

Ответы [ 7 ]

5 голосов
/ 06 марта 2012

Другой подход выглядит так:

defaults write com.apple.iphonesimulator "SimulateDevice" '"iPhone (Retina)"'

Однако, как и в случае с подходом «appleScript» от sch, кажется, что это не совсем работает, когда используется как часть фазы сборки. Все еще расследую ...

3 голосов
/ 06 марта 2012

Вы должны использовать AppleScript, чтобы изменить значение SimulateDevice в com.apple.iphonesimulator.plist.

Вот пример , который делает это после того, как предлагает пользователю выбрать нужный тип устройства. Вы можете изменить его, чтобы прочитать значение из командной строки или использовать "iPhone (Retina)" в качестве значения по умолчанию.

Следующий скрипт изменяет устройство симулятора на значение из командной строки:

on run argv

set selectedDevice to item 1 of argv as string

set thePListFolderPath to path to preferences folder from user domain as string
set thePListPath to thePListFolderPath & "com.apple.iphonesimulator.plist"
tell application "System Events"
    tell property list file thePListPath
        tell contents
            set value of property list item "SimulateDevice" to selectedDevice
        end tell
    end tell
end tell

end run

И вы можете выполнить его из терминала, используя команду osascript:

osascript myScript.scpt "iPhone (Retina)"

Или

osascript myScript.scpt "iPhone"

Редактировать

Вы можете изменить этот скрипт, чтобы он по умолчанию запускал симулятор Retina:

set selectedDevice to "iPhone (Retina)"

set thePListFolderPath to path to preferences folder from user domain as string
set thePListPath to thePListFolderPath & "com.apple.iphonesimulator.plist"
tell application "System Events"
    tell property list file thePListPath
        tell contents
            set value of property list item "SimulateDevice" to selectedDevice
        end tell
    end tell
end tell

Наконец, обратите внимание, что изменения в "SimulateDevice" вступают в силу только при запуске нового симулятора.

2 голосов
/ 07 августа 2013

Для тех, кто пишет в Ruby, есть метод установки имитируемого устройства в симуляторе:

  def set_simulated_device(simulated_device)
    current_simulated_device = `defaults read com.apple.iphonesimulator "SimulateDevice"`.chomp

    if current_simulated_device != simulated_device
      simulator_pid = `ps -ax|awk '/[i]Phone Simulator.app\\/Contents\\/MacOS\\/iPhone Simulator/{print $1}'`.chomp
      Process.kill('INT', simulator_pid.to_i) unless simulator_pid.empty?
      `defaults write com.apple.iphonesimulator "SimulateDevice" '"#{simulated_device}"'`
    end
  end


Список аргументов, которые можно использовать

«iPhone Retina (3,5 дюйма)»
«iPhone Retina (4-дюймовый)»
«iPhone Retina (4-дюймовый 64-разрядный)»
"IPad"
"iPad Retina"
"iPad Retina (64-bit)"

0 голосов
/ 18 мая 2015

Вы можете указать устройство с флагом -destination:

xcodebuild -scheme "Tests"      \
           -configuration Debug \
           -destination "platform=iOS Simulator,name=iPhone 6"
0 голосов
/ 15 июля 2014

Pro-tip, создайте псевдоним.

alias ios="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator  -SimulateDevice”

Пример:

ios "iPhone Retina (3.5-inch)"
ios "iPhone Retina (4-inch)"
ios "iPhone Retina (4-inch 64-bit)"
ios "iPad"
ios "iPad Retina"
ios "iPad Retina (64-bit)"
0 голосов
/ 06 декабря 2013

не говорит ни о каких ответах неправильно .. но это работало для ios 7

-- START:choose.sim.device
on run argv
    --set simType to item 1 of argv
    tell application "iPhone Simulator"
        activate
    end tell
    set simType to "Ipad Retina (64-bit)"
    tell application "System Events"
        tell process "iOS Simulator"
            tell menu bar 1
                -- Hardware menu bar item
                tell menu bar item 5
                    -- Hardware menu
                    tell menu 1
                        -- Device menu item
                        tell menu item 1
                            -- Device sub menu
                            tell menu 1
                                click menu item simType
                            end tell
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end tell
    -- END:choose.sim.device

    -- Need to show the simulator again after changing device,
    -- or else the simulator be hidden when launched by instruments
    -- for some odd reason.
    tell application "System Events"
        set visible of process "iPhone Simulator" to true
    end tell

    -- START:choose.sim.device
end run
-- END:choose.sim.device

Примечание: это не "iPad", это "Ipad"

0 голосов
/ 17 ноября 2013

Это можно сделать из бинарного файла iPhone Simulator

/ Приложения / Xcode.app / Содержание / Разработчик / Платформы / iPhoneSimulator.platform / Разработчик / Приложения / iPhone Simulator.app/Contents/MacOS/iPhone \Симулятор -SimulateDevice "iPhone Retina (4-дюймовый)"

для других версий:

  • "iPhone Retina (3,5-дюймовый)"
  • "iPhone Retina (4-дюймовый) "
  • " iPhone Retina (4-дюймовый 64-разрядный) "
  • " iPad "
  • " iPad Retina "
  • " iPadСетчатка (64-разрядная) "
...