2017-11-27 16 views
11

स्थिति:पृष्ठभूमि में साथी घड़ी ऐप से मुख्य आईओएस ऐप कैसे शुरू करें?

के बाद से हमारे उपयोगकर्ताओं 4 के लिए 11 और/या WatchOS करने के लिए अपने आईओएस अद्यतन किया है, हमारे iOS एप्लिकेशन जब एप्लिकेशन हमारे WatchOS एप्लिकेशन द्वारा प्रारंभ हो जाता है कोई भी शेड्यूल टाइमर आग नहीं लगती। हो सकता है कि हम वॉचोज़ ऐप से हमारा मुख्य ऐप शुरू करते समय कुछ गलत कर रहे हों।

प्रसंग & कोड:

हमारे WatchOS एप्लिकेशन को उपयोगकर्ता शुरुआत देता है कि एक साथी अनुप्रयोग है/एक बटन दबाने से पृष्ठभूमि में हमारे iPhone एप्लिकेशन बंद करो। हम का उपयोग करके ऐसा:, सभी

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { 
    if let actionNumber : NSNumber = message[WatchActions.actionKey()] as? NSNumber { 
     if let watchAction : WatchActions = WatchActions(rawValue: actionNumber.intValue) { 

      switch(watchAction) { 
       case .isAppActive: 
        let result = BaseController.sharedInstance.sleepAndWakeUpController.isAwake() 
        replyHandler([WatchActions.resultKey() : NSNumber.init(value: result as Bool)]) 
       return 

       case .startApp: 
        AudioController.sharedInstance().playActivatedSound() 

        let isRunningOnForeground = ApplicationStateHelper.isActive() 
        if isRunningOnForeground == false { 
         BaseController.sharedInstance.start(inBackground: true) 
        } 
        let result = true 
        replyHandler([WatchActions.resultKey() : NSNumber.init(value: result as Bool)]) 

        DDLogInfo("[APPLE WATCH] [didReceiveMessage] [.startApp]") 
       return 
      } 
     } 
    } 

    replyHandler([WatchActions.resultKey() : NSNumber.init(value: false as Bool)]) 
    return 
} 

सब कुछ पहले की तरह काम करने लगता है, हम सही ढंग से GPS स्थानों मिलती है:

func startMainApp() { 
    guard WCSession.default().isReachable == true else { 
     print("Watch is not reachable") 
     return 
    } 

    var data = [String : AnyObject]() 
    data[WatchActions.actionKey()] = NSNumber.init(value: WatchActions.startApp.rawValue as Int) 

    WCSession.default().sendMessage(data, replyHandler: { (result: [String : Any]) in 
     let resultNumber = result[WatchActions.resultKey()] as? NSNumber 
     let resultBool = resultNumber!.boolValue 
     if resultBool == true { 
      self.setModeActivated() 
     } else { 
      self.setModeActivationFailed() 
     } 

    }) { (error: Error) in 
     if (error as NSError).code != 7012 { 
      print("start app error: \(error.localizedDescription)") 
      self.setModeActivationFailed() 
     } 
    } 
} 

तो हमारी मुख्य अनुप्रयोग में, हम संदेश प्राप्त होता है और हमारे आधार नियंत्रक शुरू हमारी प्रक्रियाएं शुरू हो जाती हैं, हालांकि, Timer ऑब्जेक्ट्स जो प्रारंभ हो जाती हैं, आग नहीं लगती हैं।

यह आईओएस 10 पर पूरी तरह से काम करता है, इसलिए मुझे संदेह है कि आईओएस 11 पृष्ठभूमि राज्यों के साथ ऐसा कुछ है जो अलग-अलग काम करता है। हालांकि, मुझे इसका कोई दस्तावेज नहीं मिल रहा है।

अतिरिक्त जानकारी:

  • आईओएस 10, जब हम अपने मुख्य अनुप्रयोग इस तरह से शुरू कर दिया पर, ऐप्स iPhone पर बहु-कार्य दृश्य में दिखाई देता हो गया। अब आईओएस 11 पर, यह मल्टीटास्क दृश्य में दिखाई नहीं दे रहा है, हालांकि यह पृष्ठभूमि पर चलता है। मैं सफलतापूर्वक स्थानीय नोटिफिकेशन देखता हूं जो मैं पृष्ठभूमि पर शेड्यूल करता हूं, मैं सक्रिय कोड के माध्यम से डीबग कर सकता हूं और ऐप आइकन टैप करते समय, ऐप तुरंत उपलब्ध होता है।
  • हमारे वॉचोज़ ऐप में 2.0
  • पर डिबग किए गए डिवाइस के साथ एक्सकोड के माध्यम से डीबग -> पीआईडी ​​या नाम से अटैचमेंट -> ऐप नाम दर्ज किया गया है। फिर ऐप्पल वॉच और डीबग से हमारा ऐप शुरू करें।
  • reproducable आईओएस 11.0.3 पर iPhone पर WatchOS 4,0 6

सवालों के साथ: सबसे अच्छा तरीका घड़ी app से हमारे मुख्य अनुप्रयोग शुरू करने के लिए क्या है? पृष्ठभूमि राज्यों के संबंध में आईओएस 11/वॉचोस 4 में कुछ बदल गया है? क्या मुझे इसका दस्तावेज मिल सकता है? क्या यह एक आईओएस बग हो सकता है?

+0

आप टाइमर का काम नहीं करते हैं, लेकिन आपके द्वारा साझा किया गया कोड में टाइमर का उदाहरण नहीं है जो आग नहीं करता है। –

उत्तर

3

सभी मैं पेशकश कर सकते हैं तो आपको एक पुष्टिकरण है कि इस व्यवहार आईओएस 11. करने के लिए आईओएस 10 से तथ्य परिवर्तन में किया था यह मेरा संदेह है आईओएस 10 (और पर व्यवहार पहले कि: इस दस्तावेज़ में मदद की जा सकती है?) गलत था। ऐप्पल के पास ऐसे व्यवहार को बदलने के बारे में कोई योग्यता नहीं है जो अनजान/क्या गलत है, भले ही डेवलपर व्यवहार पर भरोसा करे (मुझे पूरा यकीन है कि मैंने अपनी पिछली घड़ी परियोजना पर इस व्यवहार का उपयोग किया था)।

तथ्य यह है कि UIApplication की स्थिति घड़ी से संदेश द्वारा लॉन्च होने पर background है। जब विशेष पृष्ठभूमि निष्पादन मोड/पृष्ठभूमि कार्य का उपयोग नहीं किया जाता है तब तक एप्लिकेशन पृष्ठभूमि में तब होता है जब टाइमर को चलाने की आवश्यकता नहीं होती है। यह तथ्य बहुत अच्छी तरह से जाना जाता है और आमतौर पर आईओएस डेवलपर के कैरियर में काफी जल्दी सामना करना पड़ता है। तथ्य यह है कि घड़ी से लॉन्च होने पर टाइमर पृष्ठभूमि में चला जाएगा, मैं एक गलती, अनुमान लगा सकता हूं।

मुझे आपके उपयोग के मामले को नहीं पता, यानी आप उन टाइमर पर भरोसा क्यों कर रहे थे, लेकिन एक चीज जो आप कर सकते हैं वह एक साधारण पृष्ठभूमि कार्य बनाना है जो आपको थोड़ा और समय देगा जब ऐप है का शुभारंभ किया।

var backgroundTask: UIBackgroundTaskIdentifier? 
backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "app Start Task", expirationHandler: { 
    guard let task = backgroundTask else { return } 
    UIApplication.shared.endBackgroundTask(task) 
}) 

let timer = Timer(timeInterval: 1, repeats: true) { (timer) in 
    print("Running") 
} 

आप में अधिक संगत, अब नहीं चल समाधान की जरूरत है, तो आप जो कुछ भी काम टाइमर के लिए वर्तमान में है क्या करने के लिए एक अवसर के रूप अपने स्थान के अद्यतन लाभ उठाने के लिए आवश्यकता हो सकती है। आगे बढ़ने के लिए कई अन्य पृष्ठभूमि मोड भी हैं।

आपके प्रश्नों का सारांश:

प्रश्न: सबसे अच्छा तरीका है घड़ी app से हमारे मुख्य अनुप्रयोग शुरू करने के लिए क्या है?
ए: आपका प्रस्तावित कोड साथी ऐप लॉन्च करने का एक शानदार तरीका है।

प्रश्न: पृष्ठभूमि राज्यों के संबंध में आईओएस 11/वॉचोस 4 में कुछ बदल गया है?
ए: नहीं, विशेष रूप से टाइमर के संबंध में। विभिन्न व्यवहार की संभावना एक सुधार है।

प्रश्न: क्या मुझे इसका दस्तावेज मिल सकता है?
ए: मैं नहीं कर सकता। कभी-कभी आप इस जानकारी को सेब इंजीनियरों से फ़ोरम पर या कोड डेवलपर खाते के माध्यम से अपने डेवलपर खाते के माध्यम से या डब्ल्यूडब्ल्यूडीसी पर जा सकते हैं।

प्रश्न: क्या यह आईओएस बग हो सकता है?
ए: पहले के व्यवहार की संभावना बग थी।

1

जब ऐप बंद हो जाता है और पृष्ठभूमि में नहीं चल रहा है तो स्थान आईओएस 11 में कभी भी ट्रैक नहीं होता है, यह iWatchOS 4 और आईओएस 11 बग नहीं है। Changes to location tracking in iOS 11 आईओएस 11 भी मौजूदा एपीआई के लिए कुछ प्रमुख परिवर्तन करता है:

आईओएस 11

में स्थान ट्रैकिंग में हुए परिवर्तन इस दस्तावेज़ लिंक का पालन करें। प्रभावित क्षेत्रों में से एक स्थान ट्रैकिंग है।

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

उदाहरण के लिए, चलो उन दो ऐप्स को दोबारा मानें; निरंतर पृष्ठभूमि स्थान और महत्वपूर्ण स्थान परिवर्तन निगरानी ऐप। मान लें कि उपयोगकर्ता निरंतर पृष्ठभूमि स्थान ऐप के साथ दौड़ने के लिए चला जाता है। वे दौड़ पर चले जाएंगे, वे वापस आ जाएंगे, वे पूरे समय ठोस तीर देखेंगे, और जब वे अपने मानचित्र को देखेंगे, तो वे हर मोड़ देखेंगे और उन्हें बदल देंगे। जब वे उस ऐप को इंस्टॉल करते हैं जो महत्वपूर्ण स्थान परिवर्तन निगरानी का उपयोग करता है, तो वे एक ही चीज, एक ठोस तीर देखेंगे। जहां तक ​​उपयोगकर्ता को पता है, यह ऐप शायद उनके रन ट्रैकिंग ऐप के समान जानकारी प्राप्त कर रहा है। इसलिए यदि उपयोगकर्ता हमारे संकेतों की गलत व्याख्या कर रहे हैं, तो हमने तय किया कि इसे ठीक करने का सबसे अच्छा तरीका यह है कि हम स्थान के उपयोग को कैसे इंगित करते हैं।

वॉचोस के पास आईओएस ऐप्स में मिली कई तकनीकों तक पहुंच है; हालांकि, यहां तक ​​कि यदि कोई तकनीक उपलब्ध है, तो आप इसे आईफोन पर उसी तरह इस्तेमाल करने में सक्षम नहीं हो सकते हैं।

किसी तकनीक के लिए पृष्ठभूमि निष्पादन मोड का उपयोग न करें। सामान्य रूप से, वॉच ऐप्स को अग्रभूमि ऐप्स माना जाता है; वे केवल तभी चलाते हैं जब उपयोगकर्ता अपने इंटरफेस में से किसी एक के साथ इंटरैक्ट करता है। नतीजतन, संबंधित वॉचकिट एक्सटेंशन कार्य करने के लिए अधिकांश पृष्ठभूमि निष्पादन मोड का लाभ नहीं उठा सकता है। Leveraging iOS Technologies for watch

+0

मैं आईओएस 11 में अनुमति परिवर्तन को समझता हूं। हम उपयोगकर्ता वरीयता, 'हमेशा' या 'उपयोग में' के आधार पर उपयोगकर्ता स्थान ट्रैक करते हैं। हालांकि, मुझे नहीं लगता कि यह हमारी समस्या के लिए प्रासंगिक है। हमारा वॉचोज़ ऐप एक अग्रभूमि-केवल ऐप है, यह पृष्ठभूमि में हमारे ऐप को 'स्विच' करने के लिए सिर्फ एक स्विच है, जब आपने पहले ही स्थान अनुमति दी है। आईओएस 11 के बाद से एकमात्र बदलाव मैं देखता हूं कि 'टाइमर काम नहीं करता है। स्थान अपडेट सामान्य की तरह लगते हैं। – Thermometer

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