Xcode6: सिम्युलेटर के दो उदाहरण चलाएं


122

मेरे पास अपने iOS ऐप के लिए दो अलग-अलग लक्ष्य हैं। क्या सिम्युलेटर के दो अलग-अलग उदाहरणों पर एक साथ दो ऐप चलाना संभव है? यदि यह Xcode के डिबगर के लाभ की आवश्यकता नहीं है तो यह ठीक है। अब तक मुझे एकमात्र समाधान XCode के दो संस्करणों को स्थापित करना था, लेकिन यह एक बहुत ही भारी / अंतरिक्ष-खपत समाधान है।



3
यह एक डुप्लिकेट प्रश्न है, लेकिन @ i40west का उत्तर वास्तव में बेहतर है।
विंटेजएक्साव

दरअसल, यहां जवाब और भी बेहतर stackoverflow.com/questions/896487/…
FlowUI है। SimpleUITesting.com

जवाबों:


224

आप कमांड लाइन से iOS सिम्युलेटर के दो उदाहरण चला सकते हैं। वे Xcode डिबगिंग से संलग्न नहीं होंगे - वास्तव में, यह केवल काम करने के लिए लगता है अगर आप इसे बिना Xcode के चला रहे हैं।

सबसे पहले, आपको सिम्युलेटर में इंस्टॉल करने के लिए, ऐप को एक्सकोड से सिम्युलेटर में चलाने की आवश्यकता है। सुनिश्चित करें कि आप वही सिमुलेटर चला रहे हैं जो आप अंततः उपयोग कर रहे हैं

अब एक टर्मिनल विंडो खोलें, और यह करें।

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n iOS\ Simulator.app
open -n iOS\ Simulator.app

Xcode 7 के लिए अपडेट: Xcode 7 के साथ सिम्युलेटर का एप्लिकेशन नाम बदल गया है, इसलिए यह इसके बजाय है:

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n Simulator.app
open -n Simulator.app

जब दूसरा लॉन्च होगा तो आपको एक त्रुटि चेतावनी मिलेगी। बस इसे खारिज करें और "हार्डवेयर" »" डिवाइस "से एक अलग डिवाइस चुनें । अब आपके पास दो सिमुलेटर चल रहे हैं, और जो भी ऐप आप पहले से ही Xcode से इंस्टॉल कर चुके हैं, वे वहां होंगे।


7
हे धन्यवाद, यह एक अच्छा विचार है, लेकिन अप्रत्याशित रूप से यह कहता है कि "वर्तमान स्थिति में बूट डिवाइस में असमर्थ: दूसरे सिम्युलेटर के लिए बूट किया गया"। मैं दो सिमुलेटर देखता हूं, लेकिन दूसरे का स्क्रीन अलर्ट को मंद करने के बाद भी काला रहता है।
विंटेजएक्साव

6
शायद इसलिए कि मेरा XCode वर्तमान में चल रहा है। हो सकता है कि आपको अपने उत्तर में यह निर्देश जोड़ना चाहिए :) इसके अलावा यह तभी काम करता है जब दो अलग-अलग नकली हार्डवेयर्स (जैसे: आईफोन 5 और आईफोन 5 एस) का उपयोग किया जाए
विंटेजएक्स

13
वैसे, दो अलग-अलग सिम्युलेटेड हार्डवेयर के साथ दो अलग-अलग सिमुलेटर को ठीक से चलाने और "वर्तमान स्थिति में बूट डिवाइस में असमर्थ: बूटेड" से बचने के लिए, आपको सिम्युलेटर> हार्डवेयर पर क्लिक करके इसे शुरू करने के बाद पहले सिम्युलेटर के संस्करण को बदलना होगा। अधिक जानकारी: stackoverflow.com/questions/24023029/…
विंटेजक्साव

1
धन्यवाद! मैं 2 सिमुलेटर का उपयोग कर रहा हूं (एक आईफोन 5 चल रहा है, दूसरे आईफोन 6) आईक्लाउड सिंकिंग का परीक्षण करने के लिए। ध्यान देने के लिए, सिम्युलेटर का सिंकिंग बारीक है, इसलिए व्यावहारिक उद्देश्यों के लिए आपको डीबग-> ट्रिगर आईक्लाउड सिंक का उपयोग करके आईक्लाउड सिंक को मजबूर करना होगा। तो इन दो उपकरणों के साथ अपने अलग-अलग सिम्युलेटर विंडो में मेरा एप्लिकेशन चल रहा है, मैं डिवाइस 1 (iphone5) पर बदलाव करता हूं, डिवाइस 1 के लिए फोर्स सिंक, डिवाइस 2 (आईफोन 6) पर क्लिक करें और सिंक सिंक करें। और वायोला, अब आप सिम्युलेटर में आईक्लाउड सिंकिंग का परीक्षण कर सकते हैं। सिम्युलेटर के कंसोल को खोलने में मदद मिलती है, क्योंकि जब आप पृष्ठभूमि सिंक गतिविधि को देखते हैं तो ऐसा होता है।
ऑब्जेक्टिव

3
मुझे खुशी है कि मुझे आपका जवाब मिल गया, धन्यवाद! बस उल्लेख करना चाहता था कि जाहिरा तौर पर आपके पास XCode एक ही समय में चल सकता है, निम्न चेतावनी के साथ: 1. दूसरे सिम्युलेटर में पहले वाले की तुलना में एक अलग कॉन्फ़िगरेशन होना चाहिए (पॉपअप शिकायत के बाद, आपको सिम्युलेटर के डिवाइस संस्करण को बदलना होगा हार्डवेयर मेनू से)। 2. जब भी आप XCode से पहले सिम्युलेटर को रोकते और पुनः आरंभ करते हैं, तो दूसरा भी बंद हो जाएगा और फिर से चालू हो जाएगा (और आपको इसे फिर से डिवाइस संस्करण में बदलना होगा)
एलेक्स

26

Xcode 9+

Xcode 9 अब कई सिमुलेटर लॉन्च करने का समर्थन करता है। इसकी घोषणा डब्ल्यूडब्ल्यूडीसी 2017 में की गई थी।

बस जाओ और Xcode, Cmd + R में सिम्युलेटर को बदलो और आपको एक नया सिम्युलेटर पॉपिंग दिखाई देगा।

यहाँ छवि विवरण दर्ज करें


9

सफलतापूर्वक परीक्षण किया गया कि i40west का समाधान सिम्युलेटर को मैन्युअल रूप से लॉन्च करने के लिए काम करता है, लेकिन मूर्खतापूर्ण लगता है कि इस दिन और उम्र में, आईओएस सिम्युलेटर को कमांड लाइन से समवर्ती परीक्षणों को चलाने के लिए अलग-अलग Xcode संस्करणों और विभिन्न डिवाइस प्रकारों की आवश्यकता होती है (थोड़ा अलग उपयोग मामला लेकिन शीर्ष पर मूल प्रश्न से संबंधित )।

यहां पर Apple लेख देखें जो कमांड लाइन के निर्माण और परीक्षण के लिए सबसे अधिक प्रासंगिक है: https://developer.apple.com/library/ios/technotes/tn2339/_index.html

एकाधिक समवर्ती परीक्षणों ने हमारे लिए ठीक काम किया है - यदि 'xcodebuild परीक्षण' कमांड को सही -destination 'मान के साथ-साथ' xcodebuild परीक्षण 'कमांड को चलाने से पहले -' iOS सिम्युलेटर.app 'को' xcrun के आउटपुट से UUID के मान के साथ लॉन्च किया जाए। simctl सूची ', और अलग-अलग XCode संस्करण बायनेरिज़ (यानी Xcode 6.1 और 6.4 का आधार पथ) का चयन करने के लिए DEVELOPER_DIR पर्यावरण चर सेट करें।

एक ही भौतिक मशीन और एक ही iOS सिम्युलेटर डिवाइस जैसे कि iPad या iPhone और समान Xcode संस्करण पर समवर्ती इकाई परीक्षणों की आवश्यकता का कारण मुख्य रूप से किसी भी iOS परियोजना के CI (निरंतर एकीकरण) का समर्थन करना है, जिससे एक ही बिल्ड सिस्टम 1 से अधिक बिल्ड बना सकता है एप्लिकेशन (हमारी कंपनी में 30 ऐप्स या तो हैं) एक समय में चेक-इन सुविधा शाखाओं पर स्वचालित रूप से स्कैन किए जाते हैं और बांस एजेंट द्वारा बनाए जाते हैं, जो अन्य चलने के लिए इंतजार करने की आवश्यकता के बिना पूरा करने के लिए बनाता है - बांस ऑटो पर इस तरह के ऑटो बिल्ड का समर्थन करता है- सक्षम होने पर सुविधा शाखाओं की खोज की।

कई समवर्ती परीक्षणों को चलाने के दौरान क्या होता है, हम कई 'xcodebuild परीक्षण' कमांड को दो बार अलग-अलग Terminal.app विंडो में उत्तराधिकार में चलाते हैं, परिणाम केवल एक सिम्युलेटर विंडो दिखाई देता है और परीक्षण सबसे सरल परीक्षण में विफल होते हैं।

जब हम अपने परीक्षण लॉन्च के लिए प्रवेश मानदंड को जटिल करते हैं, तो प्रत्येक सिम और टेस्ट लॉन्च के लिए अलग-अलग Xcode संस्करण, जब मैन पेज (xcodebuild परीक्षण) के अनुसार DEVELOPER_DIR का उपयोग करते हुए हम एक अलग डिवाइस को निर्दिष्ट कर रहे हैं जो दो अलग-अलग विंडो में खुलता है, लेकिन परिणाम यह है कि पहली विंडो में कोई भी चल रहे परीक्षण दूसरे iOS सिम्युलेटर विंडो द्वारा बाधित हैं।

ऐसा लगता है कि जिस तरह से मिल रहा है, उसके तहत एक साझा साझा संसाधन है, यह सुनिश्चित नहीं है कि यह इरादा है या सिर्फ एक नई विशेषता है जो समवर्ती परीक्षण को बेहतर तरीके से लागू करने के लिए गंभीर विचार के कुछ दिनों से अधिक की आवश्यकता होती है, जो प्रतिकूल प्रभावों को दूर करता है।

हम अपने अनुभव के रूप में सिम प्रतिबंधों के आसपास काम करने के लिए वीएम का उपयोग नहीं करना चाहते हैं और सामान्य रूप से दूसरों के लिए यह है कि आईओएस वीएम पर प्रदर्शन बड़ी संख्या में छोटी फ़ाइलों के साथ भौतिक हार्डवेयर की तुलना में धीमी है। VMware सॉफ्टवेयर और Apple हार्डवेयर और / या फर्मवेयर के संयोजन में I / O मुद्दों के कारण VMs आम तौर पर बिल्ड को बहुत कम कर देगा। माफ़ करना वस्तुतः क्षमा करें, लेकिन हमारे लिए वीएम अच्छा प्रदर्शन नहीं करते हैं - वस्तुतः वीथेगेटो साइट ने हमें मैक मिनी पर ईएसएक्सआई 5.5 स्थापित करने के निर्देश दिए हैं।

हमने मैक मिनी पर ESXi 5.5 के साथ बिल्ड परफॉर्मेंस इश्यू का अनुभव किया है। एसएस मिनी के साथ 2 या अधिक (यानी 10 मिनट नंगेमेट बिल्ड वीएम पर 20 मिनट लगते हैं) एसएस मिनी के साथ भी नंगे धातु की तुलना में धीमी है। नीचे दिए गए चौकोर लेख का संदर्भ लें।

https://corner.squareup.com/2015/07/ios-build-infrastructure.html

Xcodebuild इकाई परीक्षणों के लिए एक समय में 1 सिम डिवाइस का प्रतिबंध उत्पादकता को गंभीर रूप से कम कर देता है और Apple और पारिस्थितिकी तंत्र में महत्वपूर्ण लागत को जोड़ता है।

ऐप्पल की लागत अधिक हार्डवेयर खरीद को सही ठहराने के लिए संगामिति का समर्थन करने के लिए ध्यान से सोचा जाना चाहिए, अन्य प्रतियोगियों के खिलाफ डेवलपर वेग खोने के जोखिमों को कम करना चाहिए जिनके पास सिम और ईयूएलए के संदर्भ में कम प्रतिबंध हैं।

एक ही उपयोगकर्ता लॉगिन (कैसे सबसे सिस्टम सिस्टम काम करते हैं) में समवर्ती परीक्षणों का लाभ ऐप्पल ब्रांडेड ऐप स्टोर ऐप्स की गुणवत्ता है जो बदले में है जो लोगों को पहली बार में आईओएस डिवाइस खरीदने की सुविधा देता है। खराब सॉफ़्टवेयर गुणवत्ता पूरे ब्रांड को आईओएस में थोड़ा और सुस्त और संगामिति का समर्थन करती है, निश्चित रूप से पारिस्थितिकी तंत्र का समर्थन करने के लिए जाने के स्मार्ट तरीके की तरह लगता है। हाथ में इस मुद्दे के लिए एक corollary का थोड़ा हालिया सुधार जैसे कि CI के लिए Apple के Xcode सर्वर, Xcode 7 में Xcode की स्वचालित UI परीक्षण कार्यक्षमता।

जरूरतमंद ओवरहेड्स को प्रोत्साहित करने के लिए लोगों को बड़ी मात्रा में हार्डवेयर, सेटअप, कॉन्फ़िगरेशन खरीदने के लिए, सभी मशीनों, नेटवर्क और पावर पॉइंट आदि का समर्थन करने के लिए आवश्यक कई लोगों का उल्लेख नहीं करने के लिए, संभवतः सभी को Apple के मुनाफे को नुकसान पहुंचाएगा क्योंकि हर कोई Apple जैसा नहीं है और सिमुलेटर पर समवर्ती परीक्षणों का समर्थन करने के लिए मैकप्रो या मैक मिनी के रैक को वहन करने में सक्षम। एक सिम्युलेटर का पूरा बिंदु हार्डवेयर का उपयोग करने से बचना है और परीक्षणों को गति देना भी है।

प्लस वीएम पर ईयूएलए की सीमाएं मैक प्रो पर वीएम के मामले को काफी कमजोर बनाती हैं। यह हार्डवेयर प्रकार आकर्षक होगा यदि कई सिम चल सकते हैं लेकिन चूंकि समवर्ती इकाई परीक्षण समर्थित नहीं है (ऊपर की दो स्थितियों को छोड़कर - विभिन्न XCode संस्करण और विभिन्न सिम्युलेटर डिवाइस) हम संभवतः मैक मिनी के साथ बुनियादी ढांचे के निर्माण के लिए छड़ी करेंगे।

Apple की ये सिम और EULA सीमाएं न केवल बिल्ड पाइपलाइन को धीमा बनाती हैं, बल्कि अनावश्यक जटिलता और लागत को भी जोड़ती हैं। हो सकता है कि यह छोटे ऐप्स के लिए बहुत महत्वपूर्ण न हो, लेकिन जैसे-जैसे ऐप आकार और जटिलता में बढ़ते हैं, बिल्ड एक घंटे से ऊपर ले जा सकता है (मैंने सुना है कि फेसबुक आईओएस बिल्ड में लंबा समय लग सकता है)। कोई यह जानने के लिए एक घंटे इंतजार करना चाहता है कि क्या एक निर्माण पारित हुआ।

हम मैक मिनिस पर ईएसएक्सआई वीएम चलाने जैसे हैक समाधानों के बारे में जानते हैं, जो आधुनिक एक्स बुक प्रो या मैक मिनी, या अलग-अलग लॉगिन खातों पर 10 मिनट से अधिक समय लेने वाले बिल्ड के साथ ओएस एक्स के साथ अच्छा प्रदर्शन नहीं करते हैं। पर्यावरण के लिए नंगे धातु की मशीन पर एक ही Xcode संस्करण और एक ही सिम्युलेटर डिवाइस पर समवर्ती परीक्षण चलाने में सक्षम होने के लिए।

ESXi आधिकारिक तौर पर समर्थित नहीं है, हालांकि यह बहुत अच्छी तरह से काम करता है। VMware मैक मिनी हार्डवेयर का समर्थन नहीं कर सकता है कारणों में से एक अभी तक ECC मेमोरी की कमी है, हालांकि मैक प्रो समर्थित है क्योंकि इसमें ECC मेमोरी है, यह संभावना है कि मैक मिनी के रूप में iOS के संदर्भ में नंगे धातु की तुलना में धीमा बनाता है एक ही हार्डवेयर और सॉफ्टवेयर कॉन्फिग पर परीक्षण (केवल परिवर्तन वीएम बनाम नंगे धातु से चलने वाला ओएस एक्स) है। इस समय हमारे द्वारा MacPro का परीक्षण नहीं किया गया है। हमारे अनुभव में वीएमवेयर फ्यूजन प्रदर्शन के मामले में काफी धीमा है।

अधिक महत्वपूर्ण बात यह है कि डेवलपर्स को लंबे समय तक प्रतीक्षा करने की आवश्यकता होगी जब उपर्युक्त मुद्दों को एक साथ संयोजित किया जाता है जब तक कि मशीनों का पूल बदलावों के पालन के लिए पर्याप्त नहीं होता (प्रत्येक 2 dev के लिए एक CI बिल्ड, डेवलपर के लिए मशीनों का बहुत उच्च अनुपात)। CI बिल्ड मशीनें 1 से अधिक समवर्ती बिल्ड और अधिक समवर्ती परीक्षण चलाने में सक्षम होनी चाहिए।

IOS सिमुलेटर के बारे में अन्य टिप्पणियों में से एक यह है कि वे 7 प्रमुख संस्करणों के बाद भी प्रगति में एक काम लगते हैं और पूरी तरह से अधूरा है। 'Xcrun simctl' उपकमांड में एक --सेट विकल्प होता है जो कुछ प्रकार के लचीलेपन की अनुमति दे सकता है लेकिन यह सुनिश्चित नहीं करता है कि क्या संभव मान मान्य है, और --noxpc के साथ भी। किसी को भी उचित मूल्यों का अनुमान लगाने की आवश्यकता नहीं है और इसके अलावा, एक पुरुष पृष्ठ होना चाहिए जो इस विकल्प को शामिल करता है और शायद उदाहरण। इन 2 दिलचस्प विकल्पों के लिए कुछ उपयोग मामले क्या हैं?

आप कह सकते हैं, अच्छी तरह से किसी भी ऐप को एक बड़े पदचिह्न के लिए डिज़ाइन नहीं किया जाना चाहिए जो चलाने के लिए समवर्ती परीक्षण को वारंट करता है, और XPC के आधार पर बेहतर वास्तुकला का उपयोग कर रहा है, क्योंकि अखंड एप्लिकेशन मुद्दा हैं। यह बहुत अच्छी तरह से सही हो सकता है, यह उतना व्यावहारिक समाधान नहीं है जितना हम उम्मीद कर सकते हैं, और यह मुद्दा बना रहता है यदि आपके पास एक ही बुनियादी ढांचे पर निर्माण करने के लिए 20+ ऐप्स हैं।

उच्च थ्रूपुट के लिए मशीन विन्यास और प्रक्रियाओं को सामान्य और मापनीय बनाने के लिए सिम्युलेटर (ऐप + कोर देव) पर कुछ काम करने की आवश्यकता होगी। यह भी सभी Apple सिम्युलेटर डेवलपर्स और सिम्युलेटर उत्पाद स्वामी (ओं) के बीच उच्च स्तर के सहयोग की आवश्यकता है ताकि किसी भी ध्यान पाने के लिए इस मुद्दे के लिए उत्पाद बैकलॉग को सही ढंग से ऑर्डर करने की आवश्यकता हो :-)


6

फेसबुक से FBSimulatorControl ऐसा करने के लिए एक प्रोग्रामेटिक तरीका प्रदान करता है। यह https://github.com/facebook/FBSimulatorControl पर उपलब्ध है ।

FBSimulatorControlSimulatorLaunchTests.mtestLaunchesMultipleSimulatorsConcurrently में विधि नमूना कोड है जो कई सिमुलेटर लॉन्च करने के लिए दिखाता है।


5

आप विभिन्न हार्डवेयर प्रोफाइल के लिए सिम्युलेटर के कई उदाहरण चला सकते हैं और उन्हें डिबग कर सकते हैं। सबसे पहले, आपको अपने ऐप को प्रत्येक हार्डवेयर प्रकार (iPhone 6, iPad आदि) के लिए XCode से सिम्युलेटर इंस्टेंस में इंस्टॉल करना होगा। फिर सिम्युलेटर इंस्टेंस और आपके ऐप को चलाएं जैसा कि ऊपर बताया गया है। इसे डीबग करने के लिए, आप डिबगर को "XCode-> डीबग-> अटैच टू प्रोसेस" मेनू से प्रक्रियाओं को संलग्न कर सकते हैं। आप इस ब्लॉग प्रविष्टि को एक उदाहरण के लिए देख सकते हैं: http://oguzdemir.dualware.com/?p=43


5

अपने कंप्यूटर पर सिमुलेटर के UDID को सूचीबद्ध करने और इसे चलाने के लिए .sh में थोड़ी स्क्रिप्ट। एक्सटेंशन ".sh" वाली फ़ाइल में नीचे दिए गए कोड को कॉपी करें और इसे टर्मिनल में चलाएं।

कैसे:

चरण 1। विकल्प 1 के साथ उपकरणों की सूची बनाएं और UDID वांछित की प्रतिलिपि बनाएँ

चरण 2। विकल्प 2 चलाएं और यूडीआईडी ​​पेस्ट करें फिर एंटर कुंजी दबाएं

सावधान रहें: सत्यापित करें कि जिस पथ में आपके सिमुलेटर ठीक हैं (यदि आपके पथ से प्रतिस्थापित नहीं किया गया है)

#!/bin/sh
PS3='Type the number of your choice (1, 2 or 3) and press Enter: '
options=("List Devices" "Run Simulator" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "List Devices")
            xcrun simctl list devices
            echo "\033[1m\n\nCopy the UDID in parentheses of the device which you want run and launch option 2 (Run Simulator)\033[0m"
            ;;
        "Run Simulator")
            read -p 'Type device UDID which you want launch: ' currentDeviceUDID
            open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID $currentDeviceUDID
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

धन्यवाद,


0

यह 2020 है, xCode 11.4: फ़ाइल -> ओपन डिवाइस -> आईओएस 13.4 -> और iPhone संस्करण चुनें जो पहले नहीं चल रहा था और आपको दूसरा एमुलेटर चल रहा होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.