2014-06-17 10 views
17

मैं एक परीक्षण ऐप मैं स्विफ्ट के साथ लिख रहा हूँ मिल गया, मैं आईओएस 7 को लक्षित लेकिन मैंतेज, ios 7 के लिए कोड लिखने और 8

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound 
    | UIUserNotificationType.Alert 
    | UIUserNotificationType.Badge, 
    categories: nil)) 

जोड़ने की जरूरत है स्थानीय अधिसूचना सक्षम करना चाहते हैं लेकिन यह कॉल है नहीं उपलब्ध iOS 7 में, तो मैं जोड़ा

var version:NSString = UIDevice.currentDevice().systemVersion as NSString; 
if version.doubleValue >= 8 { 
    // ios 8 code 
} 

ios 8 कोड ब्लॉक केवल जब iOS 7 में अनुप्रयोग चलाने मैं अभी भी

dyld iOS 8 (परीक्षण), लेकिन नीचे में चलाया जाता है : प्रतीक नहीं मिला: _OBJC_CLASS _ $ _ UIUserNotificationSettings से संदर्भित /var/mobile/Applications/AC73969D-1A4C-45AC-99CA-0B3982C1EE36/Timely.app/Timely में अपेक्षित: में /System/Library/Frameworks/UIKit.framework/UIKit /var/mobile/Applications/AC73969D-1A4C-45AC-99CA-0B3982C1EE36/Timely.app/Timely

मुझे लगता है क्योंकि द्विआधारी api के लिए प्रतीक है कि iOS 7 में मौजूद नहीं है शामिल है यह है, लेकिन कैसे करना है मैं इसे हल करता हूँ?

+0

में मदद करता है जब आप इस त्रुटि देखते हैं? ऐप शुरू करते समय – jrturton

+0

, लेकिन मेरे पास यह ब्लॉक ऐप प्रतिनिधि में है, कोड आईओएस 8 में काम करता है और आईओएस 7 –

+0

में ब्लॉक को कोई त्रुटि नहीं हटाती है, आप इसे सही एसडीके के साथ संकलित कर रहे हैं, है ना?तो यदि आप इस ऐप को आईओएस 7 डिवाइस पर लॉन्च करते हैं, तो आपको इसे नवीनतम बेस एसडीके के साथ संकलित करना चाहिए ... – Alexander

उत्तर

2

दुर्भाग्य से, मुझे लगता है कि आप एक वर्तमान सीमा में चल रहे हैं, इस

What is the Swift preprocessor equivalent to iOS version check comparison?

चारों ओर इस एक ऑब्जेक्टिव-सी फ़ाइल जोड़ने के लिए है पाने के लिए एक ही रास्ता देखते हैं, और उसके बाद #if मैक्रो का उपयोग और कर स्विफ्ट से कॉल करने वाले दो सहायक फ़ंक्शन (आईओएस 8 के लिए एक और आईओएस 7 के लिए एक)। मुझे उम्मीद है कि यह किसी बिंदु पर तय किया जाएगा।

+2

'# if' में उपयुक्त नहीं है। संकलन समय पर सिस्टम संस्करण का निर्णय नहीं लिया गया है। ios7 और ios8 –

+0

पर उसी बाइनरी का उपयोग किया जा सकता है, यह वास्तव में काम करता है, ओबीजेसी में यूआईडीवीस सिस्टम संस्करण की जांच करके, ऐप ने अनजान प्रतीक के बारे में शिकायत नहीं की है, यह एक हैक –

+0

है, यह अभी के लिए है। मुझे यकीन है कि यह एक बग है। आप एक रडार फाइल करना चाह सकते हैं। –

1

बीटा 6 में ऐसा लगता है कि लिंकिंग समस्याओं के कुछ (सभी?) तय किए गए हैं। UIAlertAction और UIAlertController से जुड़े ऐप्स 7.1 पर लॉन्च करने में विफल रहते थे, लेकिन अब लॉन्च हो जाएंगे। आप अभी भी 7.1 में उनका उपयोग नहीं कर सकते हैं, लेकिन आप आईओएस संस्करण के लिए परीक्षण कर सकते हैं और पुरानी वस्तुओं का उपयोग कर सकते हैं।

0

मैं, ने वही समस्या में भाग तो किसी को भी इस रखने के लिए, यहाँ एक और संभव समाधान है:

आप अपने लक्ष्य के लिए सामान्य> जाते हैं> लिंक फ़्रेमवर्क और पुस्तकालय, आप UIKit (यदि नहीं देखना चाहिए, जोड़ने यह)।

0

यह एक गंदा हैक की तरह है सुनिश्चित करें कि यह बजाय "आवश्यक" की यह करने के लिए अगले "वैकल्पिक" कहते हैं ... लेकिन यह मेरे लिए काम करता है:

if(UIApplication.sharedApplication().respondsToSelector("isRegisteredForRemoteNotifications")){ println("is iOS8") } 
0

है Prasath द्वारा एक very good answer , लेकिन यह में लिखा है ऑब्जेक्टिव-सी,
तो मैं ऐसी ही कुछ लिखा है तेज में:

(Xc में परीक्षण किया स्तोत्र 6)

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // ... 

    // Set Notification 

    if UIApplication.sharedApplication().respondsToSelector(Selector("registerUserNotificationSettings:")) { 

     // Notifications for iOS 8 
     let notificationSettings = UIUserNotificationSettings(forTypes: .Alert | .Sound, categories: nil) 
     UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings) 
    } 
    else { 
     // Notifications for iOS < 8 
     UIApplication.sharedApplication().registerForRemoteNotificationTypes(.Alert | .Sound) 
    } 

    // ... 

    return true 
} 

आशा है कि

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