我的目标是使用libphonenumber,这是我正在从事的 iPhone 项目的谷歌电话号码处理库。
下载它(和很多小时)后,我编译了库的 C++ 版本,它构建了一些“.a”文件和“.dylib”文件,我认为我必须将它们导入到我的 xCodeProject 中才能访问那些 C++ 函数。
所以我将“libphonenumber.a”导入到我的项目中,根据需要更新了我的目标、构建设置、构建阶段和库搜索路径。
为设备和模拟器通行证构建 xCode 项目,但是给我以下警告:“ld:警告:忽略文件 ../XcodeProjects/libphonenumber/build/libphonenumber.dylib,文件是为不受支持的文件格式构建的,这不是架构链接(armv7)”。(或为模拟器编译时为 i386)
我从中了解到我必须为正确的 i386 和/或 armv7 架构编译 libphonenumber。所以我尝试这样做,但很快意识到这需要我也为 i386/armv7 架构重建 libphonenumber 的 3 个依赖库,以便现在可以正确编译 libphonenumber。最终,我放弃了,它开始在我面前看起来像一团糟。
经过我所有的考验,我只剩下
3个问题:
1) 如何编译 libphonenumber C++ 库以用于 i386/armv6/armv7 架构。
2) 使用 c++ 库时,我的假设是否正确?是否只需导入编译产生的“.a”文件,然后在我的 xCode 项目文件的标题中指向它?在 xCode 中包含和使用 c++ 库以及从 Objective-c 访问它们的函数的具体步骤是什么?
3)我确实找到了 LPNKit,一个用于 libphonenumber 的objective-c 端口,但是它不完整。有没有人听说过它,并且有幸使用它?或者有没有人有一个完整的、工作的、关于如何正确编译和安装它的说明的 libphonenumber 的objective-c 端口?
任何关于如何让这个库在 iOS 上工作的帮助或建议都将不胜感激。
更新:
我最终使用了 javascript 版本的 libphonenumber,将所有文件添加到我的包中,包括所有引用的 javascript 库,并使用 UIWebview 和 stringByEvaluatingJavaScriptFromString 来运行函数。您还可以让 UIWebview 在线引用 javascript 库(我只是希望将所有内容都放在本地,以免依赖于 Internet 连接)。
这是我所做的一个示例:
webView_ = [[UIWebView alloc] init];
[webView_ loadHTMLString:
@"<script src='base.js'></script>"
"<script>"
"goog.require('goog.dom');"
"goog.require('goog.json');"
"goog.require('goog.proto2.ObjectSerializer');"
"goog.require('goog.string.StringBuffer');"
"</script>"
"<script src=\"phonemetadata.pb.js\"></script>"
"<script src=\"phonenumber.pb.js\"></script>"
"<script src=\"metadata.js\"></script>"
"<script src=\"phonenumberutil.js\"></script>"
"<script src=\"asyoutypeformatter.js\"></script>"
"<script src=\"normalize.js\"></script>"
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];
NSString *function = [[NSString alloc] initWithFormat: @"phoneNumberParser('%@','%@','')", phoneNumber, ISOCountryCode];
NSLog(@"function is: %@", function);
NSString *result =[webView_ stringByEvaluatingJavaScriptFromString:function];
结果变量让我得到格式化的数字。
我希望这对遇到与我相同的问题的人有所帮助。