2017-12-12 116 views
5

क्या swift package generate-xcodeproj के लिए मैकोज़ लक्ष्य सेट करने का कोई तरीका है Xcode परियोजनाएं उत्पन्न करता है?'स्विफ्ट पैकेज जेनरेट-xcodeproj` के लिए मैकोज़ लक्ष्य सेट करें?

उदाहरण के लिए, "x86_64-apple-macosx10.12" पर डिफ़ॉल्ट लक्ष्य सेट करें।

पृष्ठभूमि

वर्तमान में, Xcode 9.2 स्विफ्ट toolchain कमांड लाइन पर निम्नलिखित संस्करणों पता चलता है:

swift --version 
# Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2) 
# Target: x86_64-apple-macosx10.9 
swift package --version 
# Apple Swift Package Manager - Swift 4.0.0-dev (swiftpm-13752) 

swift package generate-xcodeproj का परिणाम 10.10 की एक MacOS लक्ष्य के साथ एक Xcode परियोजना है।

नोट: जेनरेट किया गया एक्सकोड 10.10 लक्ष्य 10.9 के स्विफ्ट कमांड लाइन कंपाइलर लक्ष्य से एक संस्करण है। तो जाहिर है, swift और swift package generate-xcodeproj के लिए डिफ़ॉल्ट मैकोज़ लक्ष्य एक-दूसरे से स्वतंत्र हैं।

अब तक, Package.swift, --xcconfig-overrides के साथ कोई समाधान, या कुछ और छिपी हुई है।

+0

रूप में अच्छी तरह इस के लिए एक समाधान की तलाश। ऐसा करने के बेहतर तरीके पर भी लागू होता है: https://oleb.net/blog/2017/04/swift-3-1-package-manager-deployment-target/ – Klaas

+0

@ Klaas FYI के रूप में, मैंने दोनों के लिए अपना कामकाज पोस्ट किया 'स्विफ्ट पैकेज जेनरेट- xcodeproj' और '... -Xswiftc" -Target "-Xswiftc" x86_64 ... '[यहां] (https://stackoverflow.com/questions/47783502/set-macos-target-for-swift-package- उत्पन्न-xcodeproj/48158608 # 48158608) –

उत्तर

1

यदि आधिकारिक स्विफ्ट टूल कुछ एक्सकोड प्रोजेक्ट मैनिपुलेशन की अनुमति नहीं देते हैं, तो आप एक स्क्रिप्ट लिखने पर वापस आना चाहेंगे जो आपके लिए जेनरेट किए गए एक्सकोड प्रोजेक्ट को अपडेट करेगा।

आप xcodeproj rubygem का उपयोग कर सकते हैं। an example script देखें।

आसान बनाने के लिए एक समाधान के रूप Swift Package Manager and Xcode: Retaining Xcode Settings?

3

मैं swiftxcodeswiftbuild बनाने, समाप्त हो गया है, और swifttest बैश उपनाम एक संबंधित सवाल देखें:

  1. swift package generate-xcodeproj साथ MacOS लक्ष्य की स्थापना, और
  2. swift build -Xswiftc "-target" -Xswiftc "x86_64-…" छुपा

सेटअप

संपादित करें और source~/.bash_profile कमांड लाइन के लिए swiftxcode, swiftbuild, और swifttest उपनाम जोड़ने के लिए।

################################### 
### Swift Package Manager (SPM) ### 
################################### 
alias swiftxcode="swift package generate-xcodeproj --xcconfig-overrides Package.xcconfig" 
alias swiftbuild='swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.12"' 
alias swifttest='swift test -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.12"' 

परियोजना स्विफ्ट पैकेज प्रबंधक उपकरण संस्करण 4 का उपयोग कर निर्दिष्ट करने के लिए के लिए में संपादित Package.swift:

/// Package.xcconfig 

/// macOS Deployment Target 
/// 
/// Code will load on this and later versions of macOS. 
/// Framework APIs that are unavailable in earlier versions will be weak-linked; 
/// your code should check for `null` function pointers 
/// or specific system versions before calling newer APIs. 

MACOSX_DEPLOYMENT_TARGET=10.12 

नोट::

// swift-tools-version:4.0 
import PackageDescription 

let package = Package(… 

परियोजना के लिए फ़ोल्डर Package.xcconfig जोड़े BuildSettingExtractor (xcodeproj → xcconfig) बनाया James DempseyPackage.xcconfig f में जोड़ने के लिए अन्य सेटिंग्स का पता लगाने में मददगार हो सकता है इले।

उपयोग

cd to/some_project_folder/ 
swiftxcode  # create Xcode project 
swiftbuild  # build from command line 
swifttest  # build and run tests from command line 

चेतावनियां

  1. Package.xcconfig सेट सेटिंग केवल Xcode प्रोजेक्ट में लक्ष्य के स्तर का पर को महत्व देता है बनाएँ। कुल प्रोजेक्ट लेवल बिल्ड सेटिंग्स मान अपरिवर्तित रहते हैं।
  2. Package.xcconfig परियोजना मूल्य सभी लक्ष्यों के लिए समान सेट हैं। वर्तमान में प्रति लक्ष्य आधार पर xcconfig के लिए एक तंत्र नहीं दिखता है।
  3. कुछ xcconfig मान, जैसे SKIP_INSTALL, को Xcode प्रोजेक्ट में मैन्युअल रूप से सेट करने की आवश्यकता हो सकती है।

रोडमैप

उम्मीद है, ऊपर दिखाए गए वर्तमान सीमित xcconfig दृष्टिकोण कस्टम द्वारा बताए गए अनुसार Swift 4 Package Manager Roadmap में चर्चा प्रकट पैकेज में सेटिंग्स का निर्माण, करने की क्षमता द्वारा superceded कर दिया जाएगा।

कॉन्फ़िगरेशन फ़ाइल समर्थन

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

भी ध्यान देने योग्य है कि एप्पल के "नया बिल्ड सिस्टम (पूर्वावलोकन)", स्विफ्ट में लिखा और Xcode 9 के साथ जारी की है, निर्माण सेटिंग्स को परिभाषित करने के xcconfig फ़ाइलों का उपयोग कर सकते हैं।

संसाधन

संबंधित मुद्दे