适用于iOS的Xamarin绑定CodePush cocoapod在应用启动时崩溃

时间:2018-04-05 01:03:55

标签: xamarin code-push react-native-code-push objective-sharpie xamarin-binding

我正在创建CodePush Xamarin.iOS绑定,我使用sharpie工具和.a生成了一个胖lib CodePush文件cocoapod:

sharpie pod init ios CodePush
sharpie pod bind

然后使用.a文件和libCodePush.linkwith.cs定义创建了一个Xamarin.iOS绑定项目:

[assembly: LinkWith(
    "libCodePush.a",
    LinkTarget.ArmV7 | LinkTarget.Arm64 | LinkTarget.i386 | LinkTarget.x86_64,
    LinkerFlags = "-ObjC -lz",
    IsCxx = false,
    SmartLink = false,
    ForceLoad = true)]

我的ApiDefinition.cs添加了bundleURL(我需要绑定的唯一属性,所以我删除了所有其他属性):

// @interface CodePush : NSObject
[BaseType(typeof(NSObject))]
public interface CodePush
{
    // + (NSURL *)bundleURL
    [Static]
    [Export("bundleURL")]
    NSUrl BundleUrl { get; }
}

然后是简单的app bootstrap(假设也添加了RN绑定):

var window = new UIWindow(UIScreen.MainScreen.Bounds);
// case 1: with this line the app works fine and RN app is loaded
// var url = NSBundle.MainBundle.GetUrlForResource("main", "jsbundle");

// case 2: if this line uncommented the app is crashed on startup
var url = CodePush.BundleUrl;
var rootView = new RCTRootView(url, new NSString("codePushBinding"), new NSDictionary(), launchOptions);
var vc = new UIViewController();
vc.View = rootView;
window.RootViewController = vc;
window.MakeKeyAndVisible();

如果CodePush.BundleUrl行未注释应用程序启动时应用程序崩溃,我无法访问任何调试信息,设备日志上没有崩溃报告,应用输出中没有崩溃数据。

绑定定义可能有什么问题,如何调试此问题?

0 个答案:

没有答案