2014-10-24 11 views
6

पर कोई सामग्री नहीं है, मैं अपने मौजूदा आईओएस 7+ ऐप के लिए आज एक्सटेंशन (उर्फ विजेट) बनाने की कोशिश कर रहा हूं। आईओएस सिम्युलेटर में सब कुछ ठीक काम करता है (ज्यादातर समय) लेकिन मेरे डिवाइस पर विजेट खाली है - केवल हेडर/नाम दिखाया गया है लेकिन कोई सामग्री नहीं है।आज विजेट में आईओएस 8 डिवाइस

मुझे इसी तरह के मुद्दों से निपटने वाले कई धागे मिले लेकिन वे सभी स्विफ्ट ऐप्स में कुछ अंतर्निहित समस्याओं से संबंधित थे। मैं ऑब्जेक्टिव-सी स्विफ्ट नहीं कर रहा हूं।

यह मैं क्या किया है:

  1. जोड़ा गया मेरी ऐप्लिकेशन में एक नई टुडे एक्सटेंशन लक्ष्य। संबंधित योजना स्वचालित रूप से भी बनाई गई थी।
  2. समस्या तब भी होती है जब अपरिवर्तित डिफ़ॉल्ट विजेट का उपयोग किया जाता है। मैंने केवल इनिट-मेथोड्स को यह देखने के लिए जोड़ा कि क्या उन्हें ठीक से कहा जाता है या नहीं। तो विजेट को डिफ़ॉल्ट Hello World लेबल दिखाना चाहिए।

इस कोड है:

@interface TodayViewController() <NCWidgetProviding> 

@end 

@implementation TodayViewController 

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) 
     NSLog(@"initWithCoder"); 
    return self; 
} 

- (id)init { 
    self = [super init]; 
    if (self) 
     NSLog(@"init"); 
    return self; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) 
     NSLog(@"initWithNibName"); 
    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { 
    // Perform any setup necessary in order to update the view. 

    // If an error is encountered, use NCUpdateResultFailed 
    // If there's no update required, use NCUpdateResultNoData 
    // If there's an update, use NCUpdateResultNewData 

    completionHandler(NCUpdateResultNewData); 
} 

@end 

जब विजेट योजना का चयन करने और सिम्युलेटर में इसे चलाने विजेट कंटेनर के रूप में "आज" चयन करने के बाद सही ढंग से प्रदर्शित किया जाता है। अतिरिक्त initWithCoder लॉग इन है।

डिवाइस पर चलने पर पहले सब कुछ अपेक्षित काम करता है: आज स्क्रीन स्क्रीन आती है और विजेट दिखाए जाते हैं। मेरा विजेट भी, लेकिन बिना किसी सामग्री के।

फिर Xcode निम्न संदेश दिखाता है:

कनेक्शन करने के लिए "परीक्षण उपकरण" - कनेक्शन के लिए "टेस्ट डिवाइस" पुनर्स्थापित करें और फिर "com.example.MyApp.Widget" चलाते हैं, या "com.example.MyApp.Widget" अभी भी चल रहा है, आप इसे से डीबग> प्रक्रिया से कनेक्ट> com.example.MyApp.Widget चुन सकते हैं।

कुछ भी लॉग नहीं है, मुझे लगता है कि यह खोए गए कनेक्शन की वजह से है। लेकिन विजेट खाली क्यों है?

मैंने डिवाइस लॉग में देखा लेकिन कोई क्रैश नहीं है। समस्या मेरे आईफोन 6 (आईओएस 8.0) और आईपैड एयर 2 (आईओएस 8.1)

पर बहुत समान है!

+0

सटीक होने के लिए, यह सामान्य रूप से आईओएस 8 के साथ कोई समस्या नहीं है, क्योंकि यह आईफोन 4 एस पर ठीक काम करता है। समस्या पूर्ण 64 बिट प्रोसेसर वाले उपकरणों के साथ है, इसका मतलब है 5 एस और नए और आईपैड एयर और नए .. – Markus

उत्तर

4

खोज के कुछ दिनों के बाद मैं अंत में समाधान मिल गया।Apple docs के रूप में वर्णन यह एक वैध विन्यास नहीं है:

एक युक्त एप्लिकेशन कि एक एम्बेडेड ढांचे के लिए लिंक arm64 (आईओएस) या x86_64 (ओएस एक्स) वास्तुकला का निर्माण सेटिंग में शामिल करना चाहिए या यह हो जाएगा द्वारा अस्वीकार कर दिया ऐप स्टोर (एक एप्लिकेशन एक्सटेंशन बनाना में वर्णित है, सभी एप्लिकेशन एक्सटेंशन उचित 64-बिट वास्तुकला निर्माण सेटिंग शामिल करना चाहिए।)

जब 64 एप्लिकेशन याद आ रही है केवल खारिज कर दिया नहीं होगा, लेकिन यह भी प्रदर्शित होने से रोकता है विजेट पहले स्थान पर।

मैंने विजेट को मौजूदा परियोजनाओं में जोड़ा जो अभी तक x64 के लिए कॉन्फ़िगर नहीं किया गया था और ऐसा लगता है कि उसी बिल्ड सेटिंग्स को स्वचालित रूप से विजेट पर लागू किया गया है। यह बहुत काम बचा है | अगर Xcode इस समस्या के बारे में कोई चेतावनी या संकेत दिखाया होता ...

मैंने किया था समस्या को हल करने के लिए निम्न:

  • परियोजना में परियोजना प्रविष्टि पर क्लिक करें नेविगेटर और ऐप्स लक्ष्य का चयन करें।
  • Build Settings टैब चुनें और Architectures अनुभाग पर नेविगेट करें।
  • No
  • को armv7 armv7s armv8 arm64
  • सेट Build Active Architectures Only को Standard architectures (armv7, arm64)
  • सेट Valid Architectures को Architectures सेट विजेट लक्ष्य

इसके बाद विजेट सिम्युलेटर और दोनों पर ठीक से काम करता करने के लिए एक ही सेटिंग लागू करें मेरे परीक्षण उपकरण।

0

विस्तार के viewcontroller.m में

self.preferredContentSize = CGSizeMake(320, 60); 

जोड़ने

-(void)viewdidload{} 

करने के लिए।

इस विधि ने मेरी समस्या हल की।

मुझे आशा है कि यह आपकी मदद भी कर सकता है।

मेरे परियोजना (विजेट का युक्त एप्लिकेशन) और विजेट ही arm64 वास्तुकला शामिल नहीं किया था:

+0

देरी प्रतिक्रिया के लिए खेद है। दुर्भाग्य से इसने मेरे मामले में कुछ भी नहीं बदला। –

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