首先,我知道私有框架/API不会让我进入AppStore,这只是私人使用/研究。
我无法用ChatKit.framework编译我的项目。
基本上,我需要在某种程度上插入一个CKDBMessage对象并从中获取内容。
我尝试过的第一种方法是能够调用以下方法:
CKDBMessage* msg = [[CKDBMessage alloc] initWithRecordID:lastID];
NSLog(@"GOT SMS: %@", msg.text);我无法让它与这些解决方案的任何组合一起编译:
CKDBMessage.h添加到我的项目ChatKit.framework的所有标头ChatKit.framework文件本身我有Headers文件夹中的头文件和框架文件,我尝试在递归/非递归的情况下添加任何/所有这些构建设置:
$(PROJECT_DIR)/Headers$(SRCROOT)/Headers/ChatKit.framework/Headers$(SRCROOT)/Headers
$(SRCROOT)/Headers$(SRCROOT)/Headers/ChatKit.framework/Headers
总是搜索用户路径总是在是的
我尝试的第二个是在运行时完成所有事情,这就是我所拥有的:
Class CKDBMessage = NSClassFromString(@"CKDBMessage");// objc_getClass("CKDBMessage");
SEL sel = @selector(initWithRecordID:);
NSMethodSignature *signature = [CKDBMessage methodSignatureForSelector:sel];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.selector = sel;
[invocation setArgument:&lastID atIndex:2];
[invocation invoke];
NSObject * msgWeak = [CKDBMessage alloc];
[invocation getReturnValue:&msgWeak];
NSObject *msg = msgWeak;
NSString *text = [msg performSelector:@selector(text)];
NSLog(@"text: %@", text);这里我在invocationWithMethodSignature:上停留,因为NSClassFromString返回的是0而不是类..。
对这两种方法中的任何一种有什么想法?
这是用于非越狱的,iOS8(.2),使用Xcode6
发布于 2015-03-22 06:43:10
好吧,没有多少人看过这个,但是为了我们的wiki社区,我通过将CKDBMessage.h文件添加到我的项目中(实际上我添加了ChatKit的所有头,但我不认为这是必要的)来解决这个问题,因为我像这样动态地用dlopen加载了框架:
dlopen("/System/Library/PrivateFrameworks/ChatKit.framework/ChatKit", RTLD_LAZY)所以我的全部解决办法是:
dlopen("/System/Library/PrivateFrameworks/ChatKit.framework/ChatKit", RTLD_LAZY);
Class CKDBMessageClass = NSClassFromString(@"CKDBMessage");
CKDBMessage *msg = [[CKDBMessageClass alloc] initWithRecordID:lastID];
NSString *text = msg.text;
NSLog(@"text: %@", text);获取最后一条消息的ID涉及另一个框架:IMDPersistence
//SomeFile.h
// ...
//declare the function:
static int (*IMDMessageRecordGetMessagesSequenceNumber)();
// SomeFile.m
// ...
//open IMDPersistence framework
void *libHandleIMD = dlopen("/System/Library/PrivateFrameworks/IMDPersistence.framework/IMDPersistence", RTLD_LAZY);
//make/get symbol from framework + name
IMDMessageRecordGetMessagesSequenceNumber = (int (*)())dlsym(libHandleIMD, "IMDMessageRecordGetMessagesSequenceNumber");
// get id of last SMS from symbol
int lastID = IMDMessageRecordGetMessagesSequenceNumber();现在您可以使用lastID获取消息内容..。
发布于 2019-04-24 05:40:04
目前,我正在使用XCode 10。这里我们可以在PrivateFrameworks路径中看到一个MessagesKit.framework。MessagesKit.framework包含SOMessageHelper文件,在这里我们可以看到sendSMS函数。
职能:
(void)sendMessageText:(id)arg1 toRecipient:(id)arg2 withCompletionBlock:(CDUnknownBlockType)arg3;https://stackoverflow.com/questions/29151710
复制相似问题