2012-10-18 11 views
9

मैं एक ऐप बनाने, यूनिट परीक्षण चलाने और अंततः यूआई परीक्षण चलाने की प्रक्रिया को स्वचालित करने की कोशिश कर रहा हूं।आईओएस सिम्युलेटर में ऐप इंस्टॉल करने के लिए स्क्रिप्ट

मैं कुछ निर्देशिका में कमांड लाइन (xcodebuild -sdk iphonesimulator6.0) के माध्यम से एप्लिकेशन बनाने रहा हूँ।

मैं इस ऐप को कमांड लाइन के माध्यम से आईओएस सिम्युलेटर में कैसे स्थापित करूं (~/लाइब्रेरी/एप्लिकेशन सपोर्ट/आईफोन सिम्युलेटर // एप्लीकेशन में)?

मैंने कोशिश की:

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

लेकिन इस नाम "आईओएस सिम्युलेटर आवेदन अनुकरण करने के लिए नहीं मिल सका" एक नया खोजक विंडो खुलती है।

उत्तर

18

मैं एक खोल स्क्रिप्ट जो सिम्युलेटर करने के लिए एप्लिकेशन इंस्टॉल कर दिया।

#!/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" 

कैसे एप्लिकेशन इंस्टॉल करने के लिए इस स्क्रिप्ट का उपयोग करने के लिए:

  1. बदलें इस लाइन:

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

    आप अर्थात 6.0/7.1 उपयोग कर रहे हैं iPhone सिम्युलेटर के संस्करण को प्रतिबिंबित करने के।

  2. अपनी project_name.app/ फ़ोल्डर में स्क्रिप्ट को installApp.sh के रूप में सहेजें।

  3. एक टर्मिनल विंडो खोलें और परियोजना निर्देशिका से installApp चलाते हैं।

    • तो यदि मेरे पास एक परियोजना के साथ मेरा project_name.app/ है। टर्मिनल में प्रकार:

      सीडी path/to/project_name.app/

    • फिर ./installApp सिम्युलेटर करने के लिए एप्लिकेशन इंस्टॉल करें। iOS8 के लिए Run iOS Simulator from the Command Line


      और नए XCode एप्पल कुछ चीजें बदल और यह मुश्किल के माध्यम से एप्लिकेशन इंस्टॉल करने के लिए किए गए:

मैं जेफरी स्कोफिल्ड से विचार आया कमांड लाइन। यह अभी भी करने के लिए संभव है:

  1. सबसे पहले आप (यह मानते हुए आप ऐप्लिकेशन इंस्टॉल करने) अनुप्रयोग निर्देशिका खोजने की जरूरत है: find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. यह सभी रास्ते एक कस्टम ऐप्लिकेशन इंस्टॉल किया है कि सूची जाएगा। जैसे

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

  1. वहाँ ऊपर संरचना के साथ कई UUID माता पिता निर्देशिका हो जाएगा। प्रत्येक यूयूआईडी एक अलग डिवाइस के लिए एक सिम्युलेटर से मेल खाता है। शीर्ष निर्देशिका खोलें और आपको device.plist फ़ाइल मिलेगी। इस फ़ाइल में डिवाइस यह अनुकरण कर रहा है में शामिल होंगे:
<dict> 
    ... 
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> 
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> 
    ... 
</dict> 
  1. आप iPhone-6-प्लस के लिए अपने अनुप्रयोग स्थापित करना चाहते हैं इस निर्देशिका आप है इसमें यह होगा। ऐप इंस्टॉल करने के लिए उपरोक्त शेल स्क्रिप्ट चलाएं। $HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
+0

अफसोस की बात है, यह अब काम नहीं कर रहा है (मैं आईओएस 7.1 का उपयोग कर रहा हूं) – thomers

+0

क्षमा करें, मुझे और अधिक विशिष्ट होना चाहिए था। निर्देशिका अभी भी है, फाइलों की प्रतिलिपि बनाई गई है, लेकिन सिम्युलेटर स्प्रिंगबोर्ड पर ऐप नहीं दिखाता है। – thomers

+1

@ थॉमर्स यह आईओएस 7.1 के साथ काम करता है, आपको बस इस स्क्रिप्ट को 'project_name.app' फ़ोल्डर में रखना होगा और' 6.0' ''7.1' का नाम बदलना होगा (लेकिन यह अक्सर दुर्घटनाग्रस्त हो जाता है)। फिर आप उस निर्देशिका से 'installApp' चलाते हैं। तो अगर मेरे पास 'प्रोजेक्ट' के साथ मेरा 'project.app/'है। मैं 'cd project.app/'c/और' ./installApp प्रोजेक्ट 'चलाऊंगा। मैं इस टिप्पणी को भावी पाठकों के लिए बेहतर दस्तावेज़ीकरण के रूप में भी छोड़ रहा हूं। – film42

4

को TOPDIR पथ Xcode 6 के रूप में बदलने के लिए, आप simctl उपयोग करने के लिए यह पूरा करने में सक्षम होना चाहिए। ,

xcrun simctl list devices 

1 क) मान लें कि आप jq स्थापित किया है तुम केवल उन उपकरणों है कि वास्तव में उपलब्ध हैं पाने के लिए उपयोग कर सकते हैं:

1) उपलब्ध उपकरणों की सूची प्राप्त करें

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

1b) या आईफोन या आईपैड द्वारा आगे फ़िल्टर करें:

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

2) एक बार आपके पास

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

2 ए) या, आप हटा दिया गया डिवाइस के लिए स्थापित करना चाहते हैं:

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

कहाँ यह वास्तव में काम हो जाता है अगर तुम है डिवाइस के UDID आप को स्थापित करना चाहते हैं सभी उपकरणों पर एक ही अनुप्रयोग चलाने के लिए चाहते हैं:

xcrun simctl erase all 
:

1) रीसेट/सभी सिमुलेटर मिटा

2) प्रत्येक परीक्षा के लिए खुला है एक सिम्युलेटर उदाहरण:

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

3) उपलब्ध उपकरणों की UDIDs हम करने के लिए स्थापित करना चाहते हैं प्राप्त करें:

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

4) एप्लिकेशन इंस्टॉल करें (बनाया जाना चाहिए जो उचित सिम्युलेटर एसडीके) के लिए:

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

5) सुविधा के लिए, प्रत्येक डिवाइस पर एप्लिकेशन लॉन्च:

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done 
संबंधित मुद्दे