我们使用 J2ObjC 并尝试切换到 Xcode 6 的动态框架,以便将 Swift 合并到项目中。use_frameworks!
在我们只使用 J2ObjC 的情况下,简单地添加到我们的 Podfile 效果很好,但是当添加引用它的其他库时问题就来了。
在这个特定的示例中,我的 Podfile 中有两个 pod,J2ObjC
以及使用它的任何其他 pod。让我们称之为whatever
。当前的J2ObjC
podspec 可以在这里找到。这是 podspec whatever
:
Pod::Spec.new do |s|
s.ios.deployment_target = '8.0'
s.requires_arc = true
s.source_files = '**/*.{h,m}'
s.dependency 'J2ObjC'
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/J2ObjC/dist/include',
'LIBRARY_SEARCH_PATHS' => '${PODS_ROOT}/J2ObjC/dist/lib' }
end
到目前为止,一切都很好。现在,如果我想引用一个 Java 类,比如JavaUtilArrayList
在我的应用程序中,我可以这样做。
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
JavaUtilArrayList *arrayList = [[JavaUtilArrayList alloc]init];
NSString *whatever = @"o hai";
[arrayList addWithId:[whatever copy]];
NSLog(@"%@", arrayList);
}
太棒了,J2ObjC
在我的主要目标内工作。但是如果我尝试在里面做同样的事情whatever
,即使编译器认为一切都很好(J2ObjC
导入工作,类可用等),我得到一个链接器错误:
#import "SomeClass.h"
#import "java/util/ArrayList.h"
@implementation SomeClass // Inside 'whatever'
-(JavaUtilArrayList *)arrayList {
NSString *aThing = @"o hai";
JavaUtilArrayList *myList = [[JavaUtilArrayList alloc]init];
[myList addWithId:aThing];
NSLog(@"%@", myList);
return myList;
}
导致:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_JavaUtilArrayList", referenced from:
objc-class-ref in SomeClass.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我一直在疯狂地阅读 CocoaPods 指南man ld
和J2ObjC
指南,但仍然没有得到任何结果。有没有人在上面构建了一个 podJ2ObjC
并使用它成功安装了它use_frameworks!
?任何建议将不胜感激。