Xcode6とjenkinsの統合に問題があるようです。現在、この設定があり、Xcode 5で作業しています。
Xcode 6をSSH経由でリモートで実行すると、シミュレータがタイムアウトします。ローカルで実行すると成功します。
コマンド
xcodebuild -workspace PROJECTNAME.xcworkspace -scheme BGO_Tests -destination 'platform = iOS Simulator、name = iPhone 5s' -derivedDataPath ./Build clean test
2014-08-19 10:46:36.591 xcodebuild [33966:381f] iPhoneSimulator:シミュレーターの起動を120秒待機してタイムアウトしました。現在の状態は1です。
テストに失敗しました:テストターゲットBGO_Testsでエラーが発生しました(シミュレータが起動するまで120秒待機してタイムアウトしました。現在の状態は1です
最新のXcode 6ベータ6でテスト済み
ようやく良いシンプルなソリューションを見つけることができました。 JNLPは、jenkinsサーバーで多数の問題を引き起こしていました。
SSHタイムアウトの回避策https://corner.squareup.com/2015/07/ios-build-infrastructure.html 経由=
"Mavericks(10.9)およびYosemite(10.10)は、プロセスがアクセスプロセスの親子関係を介してアクセシビリティフックにアクセスできるかどうかを決定します。許可されたプロセスのリストにlaunchdを置くことにより、システム全体のアクセシビリティフックへのアクセス。これを行うには、この要点に従ってTCCデータベースを変更できます。変更を有効にするには再起動が必要です。」
#!/bin/bash
# This will add lauchd to the list of allowed processes for accessibility access
Sudo sqlite3 /Library/Application\ Support/com.Apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceAccessibility','/sbin/launchd',1,1,1,NULL)"
# This outputs the rows in the TCC database
Sudo sqlite3 /Library/Application\ Support/com.Apple.TCC/TCC.db 'select * from access'
echo "Restart is required for these changes to take effect"
2016年8月2日更新これは、Xcode 7.2.1で修正されました(「コマンドラインツール 'xcodebuild test'は、シミュレータの待機中にタイムアウトしなくなりました起動する.app」)
注:Xcode 7ではデバイス名が変更されたため、iPhone 5 (9.1 Simulator)
ではなくiPhone 5 (9.1)
を使用してデバイス名を指定しなくなりました。
使用する xcrun instruments -s
デバイスの現在のリストを取得し、次を使用して事前起動できます。
xcrun instruments -w "iPhone 5 (9.1)" || echo "(Pre)Launched the simulator."
私はそこに提案したものがもう機能しなくなった点に到達しました。ここで述べた変更を加えることに加えて、xcodebuildが期待するシミュレータを起動する必要があります[〜#〜] before [〜#〜]xcodebuildを実行します:
# First get the UDID you need
xcrun instruments -s
# Then launch it
open -a "iOS Simulator" --args -CurrentDeviceUDID <sim device UDID>
# and wait some time....
sleep 5
# Then launch your unit tests
xcodebuild [...] -destination 'platform=iOS Simulator,name=<device name matching the UDID>'
このバグはXcode 6.3以降で修正されています。新しいXcodeで同様の問題が発生している場合は、おそらく別のバグです。
バグID#18001199に関するAppleのフォローアップ:
LaunchDaemonsが提供するコンテキストは、GUIアプリケーションの実行ではサポートされていません。 SSHサービスとJenkinsのデフォルトセットアップは、どちらもLaunchDaemonsとして実装されています。 Xcode 5の以前のバージョンでは、xcodebuildはこのコンテキストでiOSシミュレーターでテストを実行できましたが、これはサポートされている構成ではなく、Xcode 6以降では機能していません。
LaunchDaemonsとは異なり、LaunchAgentsはGUIアプリケーションを実行できるコンテキストを提供します-ユーザーがその時点でログインしている場合、ウィンドウサーバー/ Aquaセッションを使用します。 Jenkins構成をLaunchDaemonからLaunchAgentに変換すると、報告された問題を回避できます。 LaunchAgentを作成して手動でロード/開始するか、「launchctl submit」を使用して、SSHセッションからiOSシミュレーターでテストを実行するためにlaunchdを使用することもできます。
ここでコメントをさらに掘り下げて( Opal に感謝します)、代わりにJNLP経由でスレーブを起動できることがわかりました。
多くの人が言ったように、現在SSHで単体テストを実行することはできないので、Appleで修正されるまで、今のところJNLPエージェントに向かってください。
JNLPで接続しても解決しない場合は、この comment に記載されている解決策を試してください。
すなわち:コマンドラインでこれらを実行します:
DevToolsSecurity -enable
Sudo dscl。 -append/Groups/_developer GroupMembership "user-that-runs-the-sim"
security authorizationdb write system.privilege.taskport is-developer
Xcodeの新しいバージョンをインストールして起動しないと、最近わかりました。シミュレーターが再びタイムアウトを開始する場合があります。これを解決するには、Xcodeを手動で起動し、要求された追加のツールをインストールする必要がありました。
私はXcode 5でこれを ここで手順を実行する 、本質的に実行することで解決しました:
Sudo security authorizationdb write system.privilege.taskport allow
これにより、これらの認証ポップアップの1つのクラスが削除されます。以下も実行する必要があります。
Sudo DevToolsSecurity -enable
ただし、Xcode 6にアップグレードすると、SSHを介してxcodebuildテストを実行しようとすると、無限にハングアップします。コンソールにログインし、キーボードから実行している限り、引き続き正常に実行されます。
私は同じ問題に遭遇しました。私の動作理論では、OSX上のSSHはLaunchDaemonとして開始され、LaunchDaemonsはUIを表示することは許可されていません。 参照 。
Java Web Startを使用してJenkinsスレーブを起動することで問題を回避できました。その後、Jenkinsスレーブをlaunchdサービスとしてインストールしました。
残念ながら、JenkinsスレーブはLaunchDaemonとしてインストールされます。LaunchDaemonは、テストを起動できないというまったく同じ問題を引き起こします。 参照 。
Jenkins Slave LaunchDaemon plistおよびjarファイルを/System/Library/LaunchDaemons
into ~/Library/LaunchAgents
、およびplistファイル内のパスを更新しました。
最終的に、OSX jenkinsスレーブでXCode6(Beta6)テストを実行できました。
以前にこのエラーを見たことがあります。1つの可能性は、Xcode6 Betaをインターネットからダウンロードした可能性があるためです(まだ利用できないアプリストアではありません)。本当にインターネットからこのアプリを開きたいです。
XcodebuildがiPhoneシミュレーターアプリを起動しようとしたときにも同じことが起こります。
試してみたいことの1つは、マシンと画面を共有し、そのポップアップで[開く]をクリックすることです。
それでもうまくいかない場合は、次のことを試みます。