Ответ 1
Он портирован нашей командой. Вы можете найти его https://github.com/me2day/libPhoneNumber-iOS
Моя цель - использовать libphonenumber, библиотеку обработки номеров телефона Google для проекта iPhone, над которым я работаю.
После загрузки (и много часов) я выполнил версию библиотеки на С++ и создал несколько файлов ".a" и ".dylib", из которых я предположил, что должен импортировать в свой xCodeProject в чтобы получить доступ к этим функциям С++.
Итак, я импортировал "libphonenumber.a" в свой проект, обновлял параметры своей цели, сборки, фазы сборки и пути поиска библиотеки по мере необходимости.
Построение проекта xCode для прохода устройства и симулятора, однако дайте мне следующее предупреждение: "ld: warning: игнорирование файла.. /XcodeProjects/libphonenumber/build/libphonenumber.dylib, файл был создан для неподдерживаемого формата файла, который не связан с архитектурой (armv7)". (или i386 при компиляции для симулятора)
Я понимаю, что я должен скомпилировать libphonenumber для правильной архитектуры i386 и/или armv7. Поэтому я попытался это сделать, но быстро понял, что это требует от меня также перестроить библиотеки зависимых библиотек libphonenumber 3, для архитектур i386/armv7, чтобы libphonenumber теперь правильно компилировался. В конце концов, я отказался от этого, он стал выглядеть большим беспорядком впереди меня.
После всех моих испытаний я остался с
3 Вопросы:
1) Как скомпилировать библиотеку libphonenumber С++ для использования с архитектурами i386/armv6/armv7.
2) При использовании библиотеки С++ мое предположение верно? Это вопрос простого импорта файла ".a", который является результатом компиляции, и просто указать на него в заголовке моих файлов проекта xCode? Какие именно шаги для включения и использования библиотек С++ и доступа к их функциям из objective-c внутри xCode?
3) Я нашел LPNKit, порт objective-c для libphonenumber, однако он неполный. Кто-нибудь слышал об этом, и ему повезло? Или у кого-нибудь есть порт objective-c для libphonenumber, который завершен, работает, с инструкциями по его компиляции и установке?
Любая помощь или советы о том, как получить эту библиотеку, работающую на iOS, будут с благодарностью.
Update:
В итоге я использовал версию libphonenumber javascript, добавив все файлы в свой пакет, включая все упомянутые библиотеки javascript, и используя UIWebview и stringByEvaluatingJavaScriptFromString для запуска функций. У вас также может быть ссылка UIWebview на javascript-библиотеку в Интернете (я просто предпочел, чтобы все было локально, а не зависало от интернет-соединения).
Вот пример того, что я сделал:
webView_ = [[UIWebView alloc] init];
[webView_ loadHTMLString:
@"<script src='base.js'></script>"
"<script>"
"goog.require('goog.dom');"
"goog.require('goog.json');"
"goog.require('goog.proto2.ObjectSerializer');"
"goog.require('goog.string.StringBuffer');"
"</script>"
"<script src=\"phonemetadata.pb.js\"></script>"
"<script src=\"phonenumber.pb.js\"></script>"
"<script src=\"metadata.js\"></script>"
"<script src=\"phonenumberutil.js\"></script>"
"<script src=\"asyoutypeformatter.js\"></script>"
"<script src=\"normalize.js\"></script>"
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];
NSString *function = [[NSString alloc] initWithFormat: @"phoneNumberParser('%@','%@','')", phoneNumber, ISOCountryCode];
NSLog(@"function is: %@", function);
NSString *result =[webView_ stringByEvaluatingJavaScriptFromString:function];
Переменная результата получает отформатированное число.
Я надеюсь, что это поможет любому, кто столкнулся с той же проблемой, что и я.
Он портирован нашей командой. Вы можете найти его https://github.com/me2day/libPhoneNumber-iOS
Просто обратите внимание, что библиотека javascript libphonenumber включает в себя библиотеку закрытия Google.
Итак, вы должны подумать о том, чтобы обернуть свой Javascript-вызов в объект Javascript, а затем скомпилировать его, используя конструктор закрытия, чтобы получить эффективный и легкий вес script. (закрытие библиотеки перед компиляцией: 18Mb, после компиляции 300Kb!)
См. выше пример такой оболочки
goog.provide('sphone.phonenumber');
goog.require('goog.dom');
goog.require('goog.json');
goog.require('goog.proto2.ObjectSerializer');
goog.require('goog.array');
goog.require('goog.proto2.PbLiteSerializer');
goog.require('goog.string');
goog.require('goog.proto2.Message');
goog.require('goog.string.StringBuffer');
goog.require('i18n.phonenumbers.NumberFormat');
goog.require('i18n.phonenumbers.PhoneNumber');
goog.require('i18n.phonenumbers.PhoneNumberUtil');
sphone.phonenumber = function(phoneNumber, regionCode) {
this.getCountryCallCode=phonenumberGetCountryCallCode;
};
function phonenumberGetCountryCallCode(phoneNumber, regionCode) {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
return number.getCountryCode();
};
// Ensures the symbol will be visible after compiler renaming.
goog.exportSymbol('sphone.phonenumber', sphone.phonenumber);
1) Исправьте все ошибки и перекомпилируйте все зависимости для руки. Как вы уже говорили.
2) Да. Согласно ksteneruds iOS-Universal-Framework
Использование iOS Framework Рамки iOS в основном такие же, как и обычные динамические среды Mac OS X, за исключением того, что они статически связаны.
Чтобы добавить фреймворк в свой проект, просто перетащите его в свой проект. При включении заголовков из вашей структуры не забудьте использовать синтаксис угловой скобки, а не кавычки.
Например, с каркасом "MyFramework":
#import <MyFramework/MyClass.h>
Этот вопрос Импорт внешней библиотеки в xcode - С++ выполняется следующим образом: импортируйте библиотеку С++, используйте ее, получите ошибки из-за зависимости от встроенных фреймворков, импорта те встроенные рамки, все работает.
3) Я бы инвестировал в LPNKit вместо того, чтобы бороться с вами по варианту 1. Вы можете вносить взносы и выигрывать от LPNKit. GitHub - замечательное место, и большой выигрыш в этом варианте 1 заключается в том, что у вас есть другой человек (или люди!), Которые имеют одну и ту же цель и будут работать вместе, чтобы достичь этого.