Cordova iOS版本的Bluemix Push Plugin错误

时间:2016-08-16 10:07:04

标签: ios push-notification ibm-cloud ibm-mobile-services ibm-cloud-plugin

我正在尝试将bluemix推送服务集成到我的Cordova应用程序中。使用以下链接中的示例:

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

当我在iOS上关注该过程并尝试构建应用程序时,它从框架中给出了以下关于IMFClient的错误。

更新:

enter image description here

3 个答案:

答案 0 :(得分:0)

如果样本中未正确配置Bridging-Header.h文件,您将看到该错误。

请参阅https://github.com/ibm-bluemix-mobile-services/bms-clientsdk-cordova-plugin-push/#configuration

  

在AppDelegate.m的顶部:

     

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

     

如果您的项目名称有空格或连字符,请在import语句中用下划线替换它们。

然后从https://github.com/ibm-bluemix-mobile-services/bms-clientsdk-cordova-plugin-core#4configuring-your-platform

  

添加桥接标头。转到构建设置> Swift编译器 - 代码   生成> Objective-C Bridging Header并添加以下路径:

     

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

希望这有帮助。

答案 1 :(得分:0)

这也可能有所帮助:在上一个问题中,我写了设置Cordova和iOS的步骤。

请记住,您还必须禁用bitcode。

Unable to run bms-samples-cordova-hellopush - bms_samples_cordova_push-Swift.h file not found

我能够使用以下步骤运行bms-samples-cordova-hellopush示例应用程序:

  1. 克隆样本:

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

  2. 在我的[your-directory]/www/js/index.js中添加了 APPLICATION_ROUTE APPLICATION_GUID (在Bluemix上为我的移动服务入门应用程序配置推送通知

    < / LI>
  3. 在我的应用程序中添加了iOS平台:

    cordova platform add ios@3.9

  4. 添加了Cordova插件:

    cordova plugin add ibm-mfp-push

  5. 使用Xcode在我的[your-app-name].xcodeproj目录中打开我的[your-app-name]/platforms/ios文件(当我收到提示时:转换为最新的Swift语法,我点击取消< /强>)

  6. 添加了桥接标头。去了Build settings > Swift Compiler - Code Generation > Objective-C Bridging Header并添加了以下路径:

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

  7. bridging header

    1. 添加Frameworks参数。去了Build Settings > Linking > Runpath Search Paths并添加了以下参数:

      @executable_path/Frameworks

    2. executable path

      1. 建成项目

      2. 在我的桥接标题中取消注释以下Push import语句。去了[your-project-name]/Plugins/ibm-mfp-core/Bridging-Header.h

      3. bridging header

        1. 更新了我的客户端应用程序以使用Push SDK
        2. 这是我更新的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. 在iOS设备上运行示例以实际注册并接收推送通知

答案 2 :(得分:0)

当应用程序在模拟器上运行时,似乎存在体系结构构建问题。

当应用程序直接在设备上运行时,我可以构建并运行该应用程序。 : - )