gpt4 book ai didi

ios - 使用 Qualcomm AR (QCAR) 从 iOS 中的应用程序包外部加载标记

转载 作者:行者123 更新时间:2023-11-29 11:18:58 26 4
gpt4 key购买 nike

有谁知道是否可以从应用程序包外部加载 config.xml 和 qcar-resources.dat(包含标记信息的文件)?

根据官方论坛和文档,事实并非如此。然而,有一个名为 Blippar 的应用程序似乎正在做这件事。我从 iPhone 备份中提取了应用程序文档文件夹,他们似乎在那里有一个 config.xml,它比应用程序包中的跟踪标记更多。

如果 QCAR SDK 不允许您指定跟踪文件的位置,他们怎么能做到这一点?

我试着变黑并在 NSBundle 上创建一个类别来覆盖

  • (NSString *)pathForResource:(NSString *)类型名称:(NSString *)ext;

改为从文档文件夹返回路径,但这似乎不起作用。

最佳答案

好的,我已经解决了。

首先,我在 NSBundle 上创建了一个类别,并为几乎所有与从 bundle 中加载文件相关的方法创建了新的实现,直到我找到 Qualcomm 正在使用的那个,它是:

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath;

有了它之后,我将类别方法更改为:

#define XFILPATH4DOCUMENT(_value) [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:_value]

- (NSString *)pathForResourceOverride:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath
{
if (([name isEqualToString:@"config"] && [ext isEqualToString:@"xml"]) || ([name isEqualToString:@"qcar-resources"] && [ext isEqualToString:@"dat"]))
{
// OMG
NSString *fileName = [NSString stringWithFormat:@"%@.%@", name, ext];
NSString *path = XFILPATH4DOCUMENT(fileName);
NSLog(@"%@", path);
return path;
}
else
{
return [self pathForResourceOverride:name ofType:ext inDirectory:subpath];
}
}

然后,通过 method swizzling 的魔力:

Swizzle([NSBundle class], @selector(pathForResource:ofType:inDirectory:), @selector(pathForResourceOverride:ofType:inDirectory:));

使用这个方法:

#import <objc/runtime.h> 
#import <objc/message.h>

void Swizzle(Class c, SEL orig, SEL replacement)
{
Method origMethod = class_getInstanceMethod(c, orig);
Method newMethod = class_getInstanceMethod(c, replacement);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, replacement, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}

这是我从这里的答案中得到的:Method Swizzle on iPhone device

可怕吗?是的。

但它有效。

关于ios - 使用 Qualcomm AR (QCAR) 从 iOS 中的应用程序包外部加载标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com