2013-05-02 5 views
3

Эта проблема возникает из-за того, что я не полностью понимаю статические библиотеки в iOS, а документы из Google кажутся немного разреженными.Google Cloud Endpoints связывает проблемы с iOS-клиентами

Я пытаюсь использовать конечные точки Google для моего мобильного бэкэнда.

Я создаю файлы .m и .h для своей клиентской библиотеки. Затем я создал новый проект (OwnItApi), перетащил старую библиотеку libGTLTouchStaticLib.a из GTL.proj в этот новый проект. Затем я добавляю сгенерированные файлы .m и .h файлов в этот проект. Я добавляю все файлы .m в источники компиляции, а затем файлы заголовков «Копировать файлы». В настройках сборки я добавляю «-ObjC -all_load» в элемент «Другие флажки компоновщика».

Обновление: Я забыл упомянуть, что я также скопировал заголовки из GTL.proj в проект OwnItAPI. К ним относятся файлы GTLBase64.h, GTLBatchQuery.h, GTLBatchResult, h и т. Д. Я думаю, что мне пришлось это делать, потому что сборка была без них.

Без заголовков я получаю: ошибка «« GTLObject.h'file не найден ». в заявлении на импорт.

Затем я беру статическую библиотеку, сгенерированную из этого проекта, и добавляю ее в свой основной проект, целью которого является приложение для iphone. Для того, чтобы проверить, если API работает, я добавил это в App Делегат

#import "OwnItApi/GTLServiceOwnit.h" 
#import "OwnItApi/GTLQueryOwnit.h" 
#import "OwnItApi/GTLOwnitApiBrands.h" 

Это внутри приложения: didFinishLaunchingWithOptions: функция

static GTLServiceOwnit *service = nil; 
if (!service) { 
    service = [[GTLServiceOwnit alloc] init]; 
    service.retryEnabled = YES; 
    [GTMHTTPFetcher setLoggingEnabled:YES]; 
} 

GTLQueryOwnit *query = [GTLQueryOwnit queryForBrandsListWithUserID:@"venkat"]; 
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLOwnitApiBrands *object, NSError *error) { 
    NSArray *items = [object brands];; 
    NSLog(@"%@", items); 
}]; 

Когда я компилирую я получаю повторяющиеся ошибки, как это:

duplicate symbol _OBJC_METACLASS_$_GTLOwnitApiBrand in: 
/Users/vrao/Library/Developer/Xcode/DerivedData/Own_It!-ertvnctptaddricdrjyrmgemzgsh/Build/Products/Release-iphoneos/libOwnItApi.a(GTLOwnit_Sources.o) 

17 ошибок, которые выглядят именно так. и, наконец,

clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Update: В проекте GTL, libGTLTouchStaticLib.a красный после того как я построить его, и когда я правой кнопкой мыши его «Показать в Finder» неактивна. Чтобы найти файл .a, я использую «Show in Finder» для «GTL.framework», а затем верните папку, чтобы найти libGTLTouchStaticLib.a.

+0

Можете ли вы перечислить весь набор файлов, добавленных в проект? –

+0

@DanHolevoet спасибо за ответ. Я добавил свой проект в github, здесь: https://github.com/vrao423/OwnItAPI. Я также отредактирую свой первоначальный ответ. –

ответ

7

Я считаю, что вы видите проблему, которую видите, так как вы также включаете файл GTLOwnit_Sources.m. Вы можете опустить это из списка файлов, которые вы включили.

+0

@DanHalevoet Вот и все. Почему был создан этот файл? –

+0

Я предполагаю, что это альтернатива для удобства. См. Комментарий в верхней части файла: «Этот файл может быть скомпилирован в проекты, чтобы не добавлять отдельные исходные файлы для этой службы». –

+2

Имеет смысл добавить его в Compile Sources вместо всех файлов. Тогда я не должен делать много изменений, когда я регенерирую свои клиентские файлы. Вы, ребята, решили позволить генератору службы создавать статическую библиотеку вместо файлов? Также мне нужно скопировать файлы заголовков в проект API? Кажется, это немного не так. –

Смежные вопросы