2012-04-18 4 views
4

Я создал Cocoa Touch Static Library, используя Xcode 4, и я хочу использовать его в проекте MonoTouch. Как я могу продолжить?Как связать статическую библиотеку Cocoa Touch с MonoTouch?

Вот содержание моей статической библиотеки:

MyClass.h
header

MyClass.m
implementation


Я построен с использованием "Постройте для архивирования" после того, как после THIS BLOG POST, и я взял libMyLib.a, он сгенерирован и добавлен в новый MonoT ouch Binding Project.
binding project

Тогда я заменил содержание libMyLib.linkwith.cs, потому что THIS BLOG POST сказал.

[assembly: LinkWith ("libMyLib.a", LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, ForceLoad = true, Frameworks="CoreGraphics QuartzCore UIKit")] 

Затем я добавил это ApiDefinition.cs
enter image description here

Я оставил StructsAndEnums.cs пустым.


Тогда я построил с версии и взял DLL из папки бин и добавить его в корень проекта MonoTouch IPad и добавить его в ссылки.

Затем, после того, следуя инструкции в THIS ARTICLE, я поставил аргументы mtouch к этому

-gcc_flags "-L${ProjectDir} -lMyLib -force_load -ObjC" 

Затем я попытался запустить проект, и я получил эту ошибку в результате сборки

ошибка MT5201: Исходная связь не удалась. Пожалуйста, просмотрите флаги пользователей, предоставленные gcc: «-L/Users/herpderp/Projects/TestProject/TestProject» «-lMyLib» -force_load »/Users/herpderp/Projects/TestProject/TestProject/libMyLib.a" "-L/Пользователи/herpderp/Проекты/TestProject/TestProject»„-lMyLib“„-force_load“„-ObjC“сообщение

ответ

1

Этот каталог содержит полный образец, показывающий различные способы интеграции библиотек Objective-C с MonoTouch:

https://github.com/xamarin/monotouch-samples/tree/master/BindingSample

+0

, который помог, я только что изменил образец проекта, чтобы он соответствовал моим потребностям –

1

ошибки для MT5201 говорят вам, что была ошибка при выполнении нативного шага ссылки. Это на 100% уверен. Вторая часть просит пересмотреть ваш gcc_flags, что является наиболее распространенной причиной отказа. Однако это не 100% уверен, что это проблема. Когда вы обращаетесь за помощью, вы всегда должны вставлять строки над любой ошибкой (поскольку они могут быть полезны).

Ошибка Вероятно, о дублировании вариантов, предоставленных родному линкеру. Это происходит потому, что вы предоставили их дважды (т. Е. В проекте привязки и в вашем основном проекте).

Из Binding Objective-C Types статьи вы связаны:

Или вы можете воспользоваться преимуществами LinkWithAttribute на уровне сборки, который можно встроить в вашем контракте файлах ...

Это означает дополнительные аргументы mtouch являются не нужно с вами использовать LinkWith атрибут. Так как вы используете этот способ (лучший:), чтобы связать свою статическую библиотеку, вы можете пропустить этот шаг (из вашего основного проекта).

Поступая таким образом, вы сами (и любой, кто пользуется вашей библиотекой) пользуется услугой, поскольку они менее рискованны, чтобы выйти из синхронизации (например, обновление библиотеки или другая конфигурация сборки).

+0

Когда я удалить дополнительные аргументы mtouch, ничего не работает. Я могу вызвать MyClass.Test («str») из моей привязки, но ничего не происходит, и я не знаю, что не так с моей привязкой. Может быть, это связано с отсутствием флагов компилятора из моего проекта xcode? или потому, что я выбрал «Build For Archiving», когда я построил свою статическую библиотеку? –

+0

** Ничего не работает ** Хорошо, что он строит, и это не было раньше (так что я бы назвал этот прогресс ;-). Теперь почему? Сложно сказать. Является ли '.a' толстой библиотекой, которую можно использовать из приложения для тестирования симулятора/устройства, которое вы используете? – poupou