4

Я запускаю тесты прикладных программ под управлением C.I. среда для приложений iPhone, и все работает отлично, используя командную строку, такую ​​как;Запуск имитатора RETINA от Xcodebuild для непрерывной интеграции

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

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

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

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

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

Возможно ли это? На данный момент я не могу найти способ.

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

+0

Является ли ваш ** ** xcodebuild команда фактически запускает приложение в симуляторе? Скажи мне как! –

+0

См. Https://gist.github.com/1365687 и http://lifeandcode.net/2011/12/automated-ios-jenkins-builds-with-application-tests-and-core-data/ и http://longweekendmobile.com/2011/04/17/xcode4-running-application-tests-from-the-command-line-in-ios/ для некоторых ссылок я следовал – Roger

ответ

3

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

Вот example, который делает это после запроса пользователю выбрать нужный тип устройства. Вы можете изменить его для чтения значения из командной строки или использовать значение "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" только тогда, когда новый симулятор запускается.

+0

Liking подход ... на Lion это не " хотя работа. Похоже, что arch -i386 osacript ... будет делать трюк. Теперь я получаю ошибку скрипта: ожидаемый «конец» или «конец говорит», но найден неизвестный токен. (-2741) – Roger

+0

Исправлено это путем замены пробелов на вкладки ... – Roger

+0

ОК, поэтому я фактически использую параметр записи по умолчанию, поскольку это было проще, но вы абсолютно настроили меня на правильный трек, и мне нужен был applescript для перезапуска, поэтому я рад принять этот ответ - большое спасибо за то, что нашли время, чтобы расширить свой ответ. – Roger

5

Другой подход выглядит;

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

Однако, как с AppleScript подхода от СХ, это, кажется, не вполне работает при использовании в качестве части этапа сборки. Все еще исследуя ...

+0

Ни один из них не работает как часть сценария запуска, я попробую перезапустить симулятор, хотя ... но как это сделать из командной строки? – Roger

+0

Решил перезапустить симулятор другим сценарием отсюда; Http: // StackOverflow.com/questions/5125243/how-can-i-reset-the-ios-simulator-from-the-line-line – Roger

2

для тех, кто сценариев в 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 Сетчатка (4 дюйма)"
"iPhone Сетчатка (4-дюймовый 64-бит)"
"IPAD"
"IPAD Сетчатка"
"IPad Retina (64-бит)"

0

Вы можете сделать это с iPhone Simulator бинарного

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator .app/Contents/MacOS/iPhone \ Simulator -SimulateDevice "iPhone Retina (4 дюйма)"

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

  • "iPhone Retina (3,5-дюймовый)"
  • «iPhone Retina (4 дюйма) "
  • "iPhone Retina (4-дюймовые 64-разрядных)"
  • "IPAD"
  • "IPAD Сетчатка"
  • "IPAD Сетчатка (64-бит)"
+0

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

+0

Если вы запускаете инструменты, и симулятор уже работает, он будет использовать текущую версию симулятора –

0

не говорит никаких ответов ошибаетесь .. но это работает для ИОС 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

Я тоже получил это откуда-то .. и я забыл, где –

0

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)" 
+4

Почему создание псевдонима можно считать про-чаевым? Пожалуйста, объясни. – rayryeng

0

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

xcodebuild -scheme "Tests"  \ 
      -configuration Debug \ 
      -destination "platform=iOS Simulator,name=iPhone 6"