2012-10-18 32 views
9

Tôi đang cố gắng tự động hóa quá trình xây dựng ứng dụng, chạy thử nghiệm đơn vị và cuối cùng chạy kiểm tra giao diện người dùng.Kịch bản để cài đặt ứng dụng trong Trình mô phỏng iOS

Tôi đang xây dựng ứng dụng thông qua dòng lệnh (xcodebuild -sdk iphonesimulator6.0) trong một số thư mục.

Làm cách nào để cài đặt ứng dụng này cho trình mô phỏng iOS thông qua dòng lệnh (trong ~/Library/Application Support/iPhone Simulator // Applications)?

tôi đã cố gắng:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp 

nhưng điều này sẽ mở ra một cửa sổ tìm mới có tên "iOS Simulator không thể tìm thấy các ứng dụng để mô phỏng".

Trả lời

18

Tôi đã tạo tập lệnh shell cài đặt ứng dụng vào trình mô phỏng.

#!/bin/sh 
# Pick a uuid for the app (or reuse existing one). 
if ! [ -f installApp.uuid ]; then 
    uuidgen > installApp.uuid 
fi 
UUID=$(cat installApp.uuid) 
#create supporting folders 
TOPDIR="$HOME/Library/Application Support/\ 
iPhone Simulator/6.0/Applications/$UUID/" 
mkdir -p "$TOPDIR" 
mkdir -p "$TOPDIR/Documents" 
mkdir -p "$TOPDIR/Library" 
mkdir -p "$TOPDIR/tmp" 
mkdir -p "$TOPDIR/$1.app" 

#copy all the app file to the simulators directory 
cp -r * "$TOPDIR/$1.app" 

Làm thế nào để sử dụng kịch bản này để cài đặt ứng dụng:

  1. Thay đổi dòng này:

    TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/" 
    

    để phản ánh các phiên bản của iPhone Simulator bạn đang sử dụng ví dụ 6.0/7.1.

  2. Lưu tập lệnh dưới dạng installApp.sh trong thư mục project_name.app/ của bạn.

  3. Mở cửa sổ đầu cuối và chạy installApp từ thư mục dự án.

    • Vì vậy, nếu tôi có project_name.app/ của mình với dự án bên trong. Gõ vào thiết bị đầu cuối:

      cd path/to/project_name.app/

    • Sau đó ./installApp để cài đặt các ứng dụng vào mô phỏng.

tôi đã có ý tưởng từ Jeffrey Scofield: Run iOS Simulator from the Command Line


Đối iOS8 và XCode mới Apple thay đổi một vài điều và làm cho nó khó khăn để cài đặt ứng dụng qua dòng lệnh. Nó vẫn còn có thể làm:

  1. Trước tiên, bạn cần phải tìm các thư mục ứng dụng (giả sử bạn đã cài đặt ứng dụng): find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. này sẽ liệt kê tất cả các đường dẫn có cài đặt một ứng dụng tùy chỉnh. Ví dụ.

/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app

  1. Sẽ có nhiều thư mục UUID mẹ với cấu trúc trên. Mỗi UUID tương ứng với trình giả lập cho một thiết bị khác. Mở thư mục trên cùng và bạn sẽ tìm thấy tệp device.plist. Tập tin này sẽ chứa các thiết bị đó được mô phỏng:
<dict> 
    ... 
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> 
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> 
    ... 
</dict> 
  1. Nếu bạn muốn cài đặt ứng dụng của bạn dành cho iPhone-6-Plus này là thư mục bạn sẽ làm điều đó. Chạy tập lệnh shell ở trên để cài đặt ứng dụng. Thay đổi đường dẫn TOPDIR thành $HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
+0

Đáng buồn thay, điều này dường như không hoạt động nữa (Tôi đang sử dụng iOS 7.1) – thomers

+0

Xin lỗi, tôi cần phải cụ thể hơn. Thư mục vẫn còn đó, các tệp được sao chép, nhưng trình mô phỏng không hiển thị ứng dụng trên bàn đạp. – thomers

+1

@thomers nó hoạt động với iOS 7.1, bạn chỉ cần đặt tập lệnh này vào thư mục 'project_name.app' và đổi tên' 6.0' thành '7.1' (nhưng thường bị treo). Sau đó, bạn chạy 'installApp' từ thư mục đó. Vì vậy, nếu tôi có 'project.app /' với một 'project' bên trong. Tôi sẽ 'cd project.app /' và chạy './installApp project'. Tôi cũng để lại nhận xét này là tài liệu tốt hơn cho người đọc trong tương lai. – film42

4

Kể từ Xcode 6, bạn sẽ có thể sử dụng simctl để thực hiện việc này.

1) Lấy danh sách các thiết bị có sẵn:

xcrun simctl list devices 

1a) Giả sử bạn đã jq cài đặt, bạn có thể sử dụng nó để chỉ nhận được những thiết bị thực sự sẵn sàng:

xcrun simctl list devices -j \ 
| jq -rc '.[] | .[] | .[] | select(.availability | contains("(available)")) ' 

1b) Hoặc thậm chí lọc thêm bằng iPhone hoặc iPad:

xcrun simctl list devices -j \ 
| jq -rc '.[] | .[] | .[] | select(.name | contains("iPhone"), contains("iPad")) | select(.availability | contains("(available)")) ' 

2) Khi bạn có UDID của thiết bị bạn muốn cài đặt vào:

xcrun simctl install $DEVICE_UDID /path/to/your/app 

2a) Hoặc, nếu bạn muốn chỉ cần cài đặt cho thiết bị khởi động:

xcrun simctl install booted /path/to/your/app 

đâu này được thực sự tiện dụng là nếu bạn muốn chạy cùng một ứng dụng trên tất cả các thiết bị:

1) thiết lập lại/xóa tất cả mô phỏng:

xcrun simctl erase all 

2) mở một trường hợp mô phỏng cho mỗi bài kiểm tra:

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app 
(Ignore the 'Booted' error and switch hardware.) 

3) Nhận UDID của thiết bị có sẵn, chúng tôi muốn cài đặt vào:

DEVICES=$(xcrun simctl list devices -j | jq -rc '.[] | .[] | .[] | select(.name | contains("iPhone"), contains("iPad")) | select(.availability | contains("(available)")) | select(.state == "Booted") | .udid ') 

4) Cài đặt ứng dụng (mà phải được xây dựng cho mô phỏng thích hợp SDK):

for device in DEVICES ; do xcrun simctl install $device /path/to/app ; done 

5) để thuận tiện, khởi động ứng dụng trên mỗi thiết bị:

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done 
Các vấn đề liên quan