Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Xcode 6でコマンドラインを使ってテストを実行する(`destination`パラメータの調査)

More than 5 years have passed since last update.

Xcode 6になって、Simulatorの数が増えて、コマンドラインでテストを実行したい場合、
xcodebuildコマンドの情報を見ても、何を指定したらいいのかイマイチよくわからなかったので調査しました。

コマンドラインでテスト実行

Testing with Xcode に記述があります。

指定する必要があるのは、workspace(or project)、schemedestinationです。
schemeは、テスト用に新規作成したほうがよいでしょう。
destinationは、iOS Device、Simulator、OSバージョンなどをkey=valueペアでカンマ区切りで指定します。

destinationに何を指定すべきかは、destinationに適当なkey=valueを指定してコマンドを実行すると一覧が表示されるのでそれで確認するのがよいでしょう。

xcodebuild test -workspace App.xcworkspace -scheme AppLogicTests \
-destination 'platform=Android,name=spam'
#[...]
Available destinations for the "AppLogicTests" scheme:
  { platform:iOS Simulator, id:1BE387A6-5747-40E5-B0CD-D09BF2ACB111, OS:7.0.3, name:iPad 2 }
  { platform:iOS Simulator, id:45E116FB-48BB-495E-90D3-130EE83FE36E, OS:7.1, name:iPad 2 }
  { platform:iOS Simulator, id:99C7DD9A-5706-441B-86E2-CA0132DA02E0, OS:8.0, name:iPad 2 }
  { platform:iOS Simulator, id:A22100E1-928C-4EF0-AD4A-1F7DFEEAC57F, OS:7.0.3, name:iPad Air }
  { platform:iOS Simulator, id:89C643E9-3031-4276-BCF5-E29A51489A8E, OS:7.1, name:iPad Air }
  { platform:iOS Simulator, id:08020160-40A3-4601-802D-187972CE1A42, OS:8.0, name:iPad Air }
  { platform:iOS Simulator, id:A3515C85-0346-4A01-BBD2-627BA2B6A96E, OS:7.0.3, name:iPad Retina }
  { platform:iOS Simulator, id:7BDF2853-6F74-45E8-BB33-D2F0890D7222, OS:7.1, name:iPad Retina }
  { platform:iOS Simulator, id:E291135E-53AA-4D3B-AD87-00F8E07E2BC9, OS:8.0, name:iPad Retina }
  { platform:iOS Simulator, id:E6A745D2-A83E-44D4-A846-F0CEF12DBD0F, OS:7.0.3, name:iPhone 4s }
  { platform:iOS Simulator, id:983928E1-3510-446F-9FF5-A378A7DB5A47, OS:7.1, name:iPhone 4s }
  { platform:iOS Simulator, id:52756176-9CED-44D0-88C9-FF12C9F7B8E5, OS:8.0, name:iPhone 4s }
  { platform:iOS Simulator, id:16039E7B-0A11-4B7A-9A4A-8E4B4A175DD0, OS:7.0.3, name:iPhone 5 }
  { platform:iOS Simulator, id:B4E21782-D230-4C06-BEF3-8D75B4D57474, OS:7.1, name:iPhone 5 }
  { platform:iOS Simulator, id:1E723270-8643-4DA1-8D08-EB6A498F34E4, OS:8.0, name:iPhone 5 }
  { platform:iOS Simulator, id:9A7A47D7-0D2D-4841-8210-6F96B8C4A7F1, OS:7.0.3, name:iPhone 5s }
  { platform:iOS Simulator, id:3269A923-701D-4736-855B-45B7DFF1C61D, OS:7.1, name:iPhone 5s }
  { platform:iOS Simulator, id:DE79D965-88D4-4516-A31C-82F359DE2836, OS:8.0, name:iPhone 5s }
  { platform:iOS Simulator, id:D0BF2D92-D746-4C40-A71C-9450443DDF27, OS:8.0, name:iPhone 6 Plus }
  { platform:iOS Simulator, id:0D98CF9F-D66E-4493-9D1E-8A17B8A06216, OS:8.0, name:iPhone 6 }
  { platform:iOS Simulator, id:392E2A71-0684-4F6D-A43A-7D96D96F9960, OS:8.0, name:Resizable iPad }
  { platform:iOS Simulator, id:FEC6D4A9-038F-45D3-96F3-E0248EC241F3, OS:8.0, name:Resizable iPhone }

例えば、iPhone 6のSimulatorでテスト実行したい場合は下記のように指定します。
OSを省略した場合、自動的に最新バージョンが利用されます(iPhone 6系はiOS 8.0しかないですが)

xcodebuild test -workspace App.xcworkspace -scheme AppLogicTests \
-destination 'platform=iOS Simulator,name=iPhone 6'

また、nameOSのかわりに、idを指定することも可能です。
iPhone 5s OS 7.1のSimulatorでテストする場合、下記のように指定します。

xcodebuild test -workspace App.xcworkspace -scheme AppLogicTests \
-destination 'platform=iOS Simulator,id=3269A923-701D-4736-855B-45B7DFF1C61D'

あと、一回で複数のdestinationを指定するのも可能なようなので、OSや端末ごとに同じテストを実行することができます。

xcodebuild test -workspace App.xcworkspace -scheme AppLogicTests \
-destination 'platform=iOS Simulator,id=3269A923-701D-4736-855B-45B7DFF1C61D' \
-destination 'platform=iOS Simulator,name=iPhone 6'

指定するパラメータがわかれば、下記のようにyamlやjsonなどの設定ファイルを用意して、GruntやRakeなどでタスクを自動生成してテスト実行することができるはずです。
これで、JenkinsだったりCIサービスなどを使ってテストができますね。

xctest-config.yml
default_settings:
  arguments: &default_arguments
    workspace: App.xcworkspace
    configuration: Debug
  platform: &default_platform
    iOS Simulator

AppLogicTests:
  latest:
    <<: *default_arguments
    destination:
      platform: *default_platform
      name: iPhone 6 Plus
  7.1:
    <<: *default_arguments
    destination:
      platform: *default_platform
      name: iPhone 5s
      OS: '7.1'

AppTests:
  latest:
    <<: *default_arguments
    destination:
      platform: *default_platform
      name: iPhone 6 Plus
  7.1:
    <<: *default_arguments
    destination:
      platform: *default_platform
      name: iPhone 5s
      OS: '7.1'
roothybrid7
I'm a programmer. Network Architect/iPhone developer/Unix/Linux/C/Objective-C/Java/Ruby/node.js/Python https://github.com/roothybrid7
https://github.com/roothybrid7
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away