У меня огромный проект Objective-C, который я хочу разделить на несколько в одном рабочем пространстве.Первоначально я сделал это, и код скомпилирован хорошо, но я решил также перенести одну категорию большого класса в другой проект, и теперь компоновщик не понимает ситуацию:
Undefined symbols for architecture x86_64:
"_OBJC_IVAR_$_MyClass.data", referenced from:
-[MyClass(Viz) someTask] in MyClass+Viz.o
d: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Вкратце, мое рабочее пространство выглядиткак это:
- MyLib project:
MyClass.h
MyClass.m
MyClass+Inner.h
MyClass+Inner.m
- MyApp project:
MyClass+Viz.h
MyClass+Viz.m
MyLib скомпилирован в MyLib.framework
, который используется в MyApp.Как я уже сказал, до перехода MyClass+Viz
в проект MyApp вся сложная логика работала правильно, поэтому проблем со связыванием проектов, вероятно, нет.Кроме того, я дважды проверил, что все файлы правильно помечены в Этапы сборки раздел настроек.
Это файл MyClass.h
:
@interface MyClass : NSObject
- (instancetype)init;
- (void)public_methods;
@end
ЭтоMyClass+Inner.h
file:
#import "MyClass.h"
@interface MyClass ()
{
// Variables placed here
// so that only class methods can access them
SomeStruct* data;
// other fields ...
}
@end
@interface MyClass (Inner)
- (void)private_methods;
@end
И файл MyClass+Viz.m
:
#import "MyClass+Viz.h"
#import "MyClass+Inner.h"
@implementation MyClass (Viz)
- (int)someTask {
return data->length;
// this or any other stuff with
// class variables from MyClass+Inner.h
// leads to "Undefined symbols" by linker
}
@end
Как я могу заставить его работать, заставить линкер видеть приватные переменные класса из другого проекта?