1

Ich versuche, das Push-Benachrichtigungen-Beispiel unter GitHub zu starten. Leider funktioniert die Konfiguration wie beschrieben here nicht.Kann nicht ausgeführt werden bms-samples-cordova-hellopush - bms_samples_cordova_push-Swift.h Datei nicht gefunden

Docs sagen: An der Spitze Ihres AppDelegate.m:

#import "[your-project-name]-Swift.h" 

Wenn Ihr Projektname Leerzeichen oder Bindestriche hat, ersetzen Sie sie mit Unterstrichen in der Import-Anweisung.

Beispiel:

// Project name is "Test Project" or "Test-Project" 
#import "Test_Project-Swift.h" 

Also habe ich für die Probe:

#import "bms_samples_cordova_push-Swift.h" 

ObjC Bridging-Header ist eingestellt auf:

bms-samples-cordova-push/Plugins/ibm-mfp-core/Bridging-Header.h

RUNPATH ist eingestellt auf:

@executable_path/Frameworks

Aber Xcode löst den Fehler oben aus. Was mache ich falsch?

Antwort

3

konnte ich die folgenden Schritte ausgeführt, die bms-samples-cordova-hellopush Beispielanwendung erhalten mit:

git clone https://github.com/ibm-bluemix-mobile-services/bms-samples-cordova-hellopush

  • mein APPLICATION_ROUTE hinzugefügt und APPLICATION_GUID in:

    1. die Probe Geklonte mein [your-directory]/www/js/index.js (nach der Konfiguration von Push-Benachrichtigungen für meine Mobile Services Starter-Anwendung auf Bluemix

    2. Added die iOS-Plattform zu meiner Anwendung:

      cordova platform add [email protected]

    3. Hinzugefügt wurde die Cordova Plugin:

      cordova plugin add ibm-mfp-push

    4. Eröffnet meine [your-app-name].xcodeproj Datei in meinem [your-app-name]/platforms/ios Verzeichnis mit Xcode (wenn ich aufgefordert wurde: Conver t zu Latest Swift Syntax, klickte ich Abbrechen)

    5. Hinzugefügt die Bridging Header.Wir gingen zum Build settings > Swift Compiler - Code Generation > Objective-C Bridging Header und fügte den folgenden Pfad:

      [your-project-name]/Plugins/ibm-mfp-core/Bridging-Header.h

    bridging header

    1. die Frameworks Parameter hinzufügen. Wir gingen zum Build Settings > Linking > Runpath Search Paths und addierten die folgenden Parameter:

      @executable_path/Frameworks

    executable path

    1. Built Projekt

    2. unkommentiert die folgenden Push-Import-Anweisungen in meine überbrückende Überschrift. Wir gingen zum [your-project-name]/Plugins/ibm-mfp-core/Bridging-Header.h:

    bridging header

    1. meine Client-Anwendung aktualisiert die Push-SDK

    Hier ist meine aktualisiert verwenden AppDelegate.m:

    /* 
    Licensed to the Apache Software Foundation (ASF) under one 
    or more contributor license agreements. See the NOTICE file 
    distributed with this work for additional information 
    regarding copyright ownership. The ASF licenses this file 
    to you under the Apache License, Version 2.0 (the 
    "License"); you may not use this file except in compliance 
    with the License. You may obtain a copy of the License at 
    
    http://www.apache.org/licenses/LICENSE-2.0 
    
    Unless required by applicable law or agreed to in writing, 
    software distributed under the License is distributed on an 
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
    KIND, either express or implied. See the License for the 
    specific language governing permissions and limitations 
    under the License. 
    */ 
    
    // 
    // AppDelegate.m 
    // bms-samples-cordova-push 
    // 
    // Created by ___FULLUSERNAME___ on ___DATE___. 
    // Copyright ___ORGANIZATIONNAME___ ___YEAR___. All rights reserved. 
    // 
    
    #import "AppDelegate.h" 
    #import "MainViewController.h" 
    #import "bms_samples_cordova_push-Swift.h" 
    
    
    #import <Cordova/CDVPlugin.h> 
    
    @implementation AppDelegate 
    
    @synthesize window, viewController; 
    
    - (id)init 
    { 
        /** If you need to do any extra app-specific initialization, you can do it here 
        * -jm 
        **/ 
        NSHTTPCookieStorage* cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    
        [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 
    
        int cacheSizeMemory = 8 * 1024 * 1024; // 8MB 
        int cacheSizeDisk = 32 * 1024 * 1024; // 32MB 
    #if __has_feature(objc_arc) 
         NSURLCache* sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; 
    #else 
         NSURLCache* sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease]; 
    #endif 
        [NSURLCache setSharedURLCache:sharedCache]; 
    
        self = [super init]; 
        return self; 
    } 
    
    #pragma mark UIApplicationDelegate implementation 
    
    /** 
    * This is main kick off after the app inits, the views and Settings are setup here. (preferred - iOS4 and up) 
    */ 
    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
    { 
        CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    
    #if __has_feature(objc_arc) 
         self.window = [[UIWindow alloc] initWithFrame:screenBounds]; 
    #else 
         self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease]; 
    #endif 
        self.window.autoresizesSubviews = YES; 
    
    #if __has_feature(objc_arc) 
         self.viewController = [[MainViewController alloc] init]; 
    #else 
         self.viewController = [[[MainViewController alloc] init] autorelease]; 
    #endif 
    
        // Set your app's start page by setting the <content src='foo.html' /> tag in config.xml. 
        // If necessary, uncomment the line below to override it. 
        // self.viewController.startPage = @"index.html"; 
    
        // NOTE: To customize the view's frame size (which defaults to full screen), override 
        // [self.viewController viewWillAppear:] in your view controller. 
    
        [[CDVMFPPush sharedInstance] didReceiveRemoteNotificationOnLaunch:launchOptions]; 
    
        self.window.rootViewController = self.viewController; 
        [self.window makeKeyAndVisible]; 
    
        return YES; 
    } 
    
    // this happens while we are running (in the background, or from within our own app) 
    // only valid if bms-samples-cordova-push-Info.plist specifies a protocol to handle 
    - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation 
    { 
        if (!url) { 
         return NO; 
        } 
    
        // all plugins will get the notification, and their handlers will be called 
        [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]]; 
    
        return YES; 
    } 
    
    // repost all remote and local notification using the default NSNotificationCenter so multiple plugins may respond 
    - (void)   application:(UIApplication*)application 
        didReceiveLocalNotification:(UILocalNotification*)notification 
    { 
        // re-post (broadcast) 
        [[NSNotificationCenter defaultCenter] postNotificationName:CDVLocalNotification object:notification]; 
    } 
    
    
    #if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 
    - (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window 
    #else 
    - (UIInterfaceOrientationMask)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window 
    #endif 
    { 
        // iPhone doesn't support upside down by default, while the iPad does. Override to allow all orientations always, and let the root view controller decide what's allowed (the supported orientations mask gets intersected). 
        NSUInteger supportedInterfaceOrientations = (1 << UIInterfaceOrientationPortrait) | (1 << UIInterfaceOrientationLandscapeLeft) | (1 << UIInterfaceOrientationLandscapeRight) | (1 << UIInterfaceOrientationPortraitUpsideDown); 
    
        return supportedInterfaceOrientations; 
    } 
    
    - (void)applicationDidReceiveMemoryWarning:(UIApplication*)application 
    { 
        [[NSURLCache sharedURLCache] removeAllCachedResponses]; 
    } 
    
    // Register device token with Bluemix Push Notification Service 
    - (void)application:(UIApplication *)application 
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ 
    
        [[CDVMFPPush sharedInstance] didRegisterForRemoteNotifications:deviceToken]; 
    } 
    
    // Handle error when failed to register device token with APNs 
    - (void)application:(UIApplication*)application 
    didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { 
    
        [[CDVMFPPush sharedInstance] didFailToRegisterForRemoteNotifications:error]; 
    } 
    
    // Handle receiving a remote notification 
    -(void)application:(UIApplication *)application 
    didReceiveRemoteNotification:(NSDictionary *)userInfo 
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
    
        [[CDVMFPPush sharedInstance] didReceiveRemoteNotification:userInfo]; 
    } 
    
    @end 
    
    1. Lief t er auf einem iOS-Gerät abtasten, um tatsächlich registrieren und erhalten Push Notifications

    Hoffentlich habe ich nichts verpassen: 0)

    ich kontaktiert habe und öffnete ein paar Probleme mit dem Cordova Team bis verbessern die Qualität dieser Probe, um die Einrichtung zu erleichtern.

    Bearbeiten: Auch, wie von Sebastian unten bemerkt, müssen Sie Bitcode deaktivieren.

  • +2

    Wenn ich diese Schritte genau auf Bestellung befolgte, funktionierte es. Darüber hinaus musste ich den Bitcode deaktivieren und eine neue Instanz des Push-Dienstes erstellen, da HTTP 500-Fehler verursacht wurden. Danke vielmals – Sebastian