2011-09-09 49 views
6

我越来越疯狂,我弄不明白。适用于iOS项目的XMLRPC-iOS

我已经下载并尝试为iOS构建XMLRPC。我与https://github.com/eczarny/xmlrpchttps://bitbucket.org/kdbdallas/xmlrpc-ios/wiki/Home 联系第一个,原来的,没有iOS目标。第二个应该有,但即使这似乎并不奏效。

我建立XML-RPC-IOS lib中使用的XCode方式如下:

  • 下载,解压缩,在Xcode开放
  • 进入菜单产品>存档
  • 在组织我选择 “共享” 的最新版本
  • 我将它保存在我自己的项目文件夹中。将其包含在项目中。

当我建立我自己的项目,我得到:

ld: warning: ignoring file /Users/paulp/Documents/ios/iPhone/ios-account/Account/external/XMLRPC/libXMLRPC_iOS.a, file was built for archive which is not the architecture being linked (i386) Undefined symbols for architecture i386:
"_OBJC_CLASS_$_XMLRPCRequest", referenced from: objc-class-ref in MyAPI.o
"_OBJC_CLASS_$_XMLRPCConnectionManager", referenced from: objc-class-ref in MyAPI.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

这怎么可能?所述XMLRPC-IOS设置被设置为:

  • SDKROOT = iphoneos5.0
  • ARCHS = $(ARCHS_STANDARD_32_BIT)= ARMv7的
  • IPHONEOS_DEPLOYMENT_TARGET = 5.0
  • VALID_ARCHS = ARMv6的armv7k armv7f的ARMv7
  • OTHER_CODE_SIGN_FLAGS = armv7k armv7f armv6 armv7
  • GCC_VERSION = com.apple.compilers.llvmgcc42

有人能为我解释如何在自己的应用程序中构建和使用XMLRPC-iOS库吗? 谢谢!

回答

10

它为我工作;这正是我所做的。

  • 创建新项目(称为RpcTest)
  • 从到位桶下载分叉项目,提取在我RpcTest目录中的zip,所以我的目录如下:

directory structure

  • 将XMLRPC-iOS.xcodeproj拖拽到我的Xcode项目中(在Frameworks组下,但这并不重要)
  • 现在,到构建设置。在项目的Build Settings中添加kdbdallas-xmlrpc-ios-f28a13cc16ae用户标题搜索路径(取消选中递归)现在建项目(CMD + B)
  • 构建阶段选项卡,展开目标相关,加XML-RPC-IOS项目,扩大链接二进制与图书馆,添加libXMLRPC_iOS.a。现在 enter image description here

你应该能够包括任何xmlrpc的头和用lib。

希望有所帮助。

编辑 Download via Dropbox. 被告知:未完全执行,只是一个演示是XMLRPC的作品! ;)

+0

真棒,非常好的完美。我一定会试一试。你能把它发给我吗?保罗 - 保罗·佩伦 - 多 - com。谢谢! –

+0

当然可以。我会把它上传到原来的地方,并在原来的答案中发布链接,它只是帮助其他人有相同的问题。 – mja

+0

@mja感谢您发布答案和代码。它确实有帮助。我只想问,https://github.com/eczarny/xmlrpc项目有三个目标。你能否帮助你如何分别提取ios版本(目标)。 – Gypsa

0

我已经使用了第一个提到了https://github.com/eczarny/xmlrpc的iPhone项目。
应该工作。 (前一段时间)

[编辑]
更多的细节: 我进口XMLRPCResponse和XMLRPCEventBasedParser(+所有相关的类,让他们从该项目的工作)。

然后,下面就来解析响应代码(我是做手工的要求):

NSURL* url = [NSURL URLWithString:@"http://www.xxxxxxxxx.fr/xmlrpc.php"]; 
NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url]; 
[urlRequest setHTTPMethod:@"POST"]; 
[urlRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 
NSString* param = [NSString stringWithFormat: @"<param><value><double>%f</double></value></param><param><value><double>%f</double></value></param><param><value><double>%.0f</double></value></param><param><value><int>1</int></value></param>", 
        request.coordinate.latitude, 
        request.coordinate.longitude, 
        request.radius/1000.0]; 
NSString* xmlrpcReq = [NSString stringWithFormat:@"<?xml version=\"1.0\"?><methodCall><methodName>geoSearch</methodName><params>%@</params></methodCall>", param]; 
[urlRequest setHTTPBody:[xmlrpcReq dataUsingEncoding:NSUTF8StringEncoding]]; 
NSURLResponse* response; 
NSError* error; 
NSData* content = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 
XMLRPCResponse* rpcResponse = [[XMLRPCResponse alloc] initWithData:content]; 
if ([rpcResponse faultCode]==0) { 
    NSArray* result = (NSArray*)[rpcResponse object]; 

干杯 莱昂内尔。

+0

谢谢你回答lionel,然而可悲的是它根本没有帮助我。如果你能解释你是如何为你的项目工作的,那将是非常棒的。 –

+0

我检查了我的旧项目,这里是我可以提取的;) – yonel

0

我可以知道你设定了什么目标吗?例如三个目标可用,如果您使用iOS,请选择libXMLRPC,然后构建,然后从构建中选择libXMLRPC.a文件,然后将其链接到我们的项目。那么它会运行。