我正在开发一个处理敏感数据的静态库。使用该库的开发人员必须不能在该库上使用反射。
在Android上,我们通过开发一个来解决这个问题aar
文件与service
并运行service
进入单独的进程;(当服务运行到另一个进程中时,开发人员不能使用反射)但我想知道iOS中是否存在类似的东西?
我们可以在单独的进程中执行静态库吗?如果没有,我们如何避免对静态库的反射?
例如:
MyTestObject *obj = [[[myTestView alloc] init ];
//===========================================
Class clazz = [obj class];
u_int count;
Ivar* ivars = class_copyIvarList(clazz, &count);
NSMutableArray* ivarArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* ivarName = ivar_getName(ivars[i]);
[ivarArray addObject:[NSString stringWithCString:ivarName encoding:NSUTF8StringEncoding]];
}
free(ivars);
objc_property_t* properties = class_copyPropertyList(clazz, &count);
NSMutableArray* propertyArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* propertyName = property_getName(properties[i]);
[propertyArray addObject:[NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
}
free(properties);
Method* methods = class_copyMethodList(clazz, &count);
NSMutableArray* methodArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
SEL selector = method_getName(methods[i]);
const char* methodName = sel_getName(selector);
[methodArray addObject:[NSString stringWithCString:methodName encoding:NSUTF8StringEncoding]];
}
free(methods);
NSDictionary* classDump = [NSDictionary dictionaryWithObjectsAndKeys:
ivarArray, @"ivars",
propertyArray, @"properties",
methodArray, @"methods",
nil];
NSLog(@"%@", classDump);
//======================================================
int v2 = [[obj valueForKey:@"testValue"] intValue];
SEL s = NSSelectorFromString(@"wannatTestIt");
[obj performSelector:s];
MyTestObject
是我图书馆的一门课程。在第一行中,我从此类初始化一个对象。
在下一行中,我读取该类的变量、方法和属性列表并记录它。结果如下:
{
ivars = (
testValue
);
methods = (
printTestValue,
wannatTestIt,
"initWithFrame:"
);
properties = (
);
}
wannaTestIt
是一个私有方法并且testValue
是一个私有变量。所以我希望使用该库的开发人员无法访问它们。但是,由于库的用户可以获得名称,因此用户最终可以调用该方法来读取 iVar 的值。
我怎样才能防止这种情况发生?