2012-01-31 13 views
13

के लिए libphonenumber मेरा लक्ष्य libphonenumber का उपयोग करना है, जो एक आईफोन प्रोजेक्ट के लिए Google का फोन नंबर हैंडलिंग लाइब्रेरी है जिसका मैं काम कर रहा हूं।आईओएस या उद्देश्य-सी पोर्ट

यह (और कई कई घंटे) डाउनलोड करने के बाद, मैं पुस्तकालय के सी ++ संस्करण पालन किया, और यह एक नंबर "ए" फ़ाइलें और ".dylib" फ़ाइलें, जिनमें से मैं मान लिया है कि मैं अपने xCodeProject में आयात करना होगा बनाया उन सी ++ कार्यों तक पहुंचने के लिए।

इसलिए मैंने अपनी परियोजना में "libphonenumber.a" आयात किया, अपना लक्ष्य अपडेट किया, सेटिंग बनाएं, चरणों का निर्माण किया, और पुस्तकालय खोज पथ आवश्यकतानुसार।

डिवाइस & सिम्युलेटर पारित करने के लिए Xcode परियोजना का निर्माण, फिर भी मुझे निम्न चेतावनी दे: "ld: चेतावनी: अनदेखी फ़ाइल ../XcodeProjects/libphonenumber/build/libphonenumber.dylib, फ़ाइल असमर्थित फ़ाइल स्वरूप के लिए बनाया गया था जो आर्किटेक्चर लिंक नहीं है (armv7) "। (या i386 सिम्युलेटर के लिए संकलन करते समय)

मैं इस से समझता हूं कि मुझे सही i386 और/या armv7 आर्किटेक्चर के लिए libphonenumber संकलित करना होगा। तो मैंने ऐसा करने की कोशिश की, लेकिन जल्दी से एहसास हुआ कि मुझे libphonenumber के 3 आश्रित पुस्तकालयों को पुनर्निर्माण करने की आवश्यकता है, i386/armv7 आर्किटेक्चर के लिए libphonenumber के लिए अब ठीक से संकलित करने के लिए। आखिरकार, मैंने उस पर छोड़ दिया, यह मेरे सामने एक बड़ी गड़बड़ की तरह दिखना शुरू कर दिया।

मेरे सभी परीक्षणों के बाद, मैं के साथ

3 प्रश्न छोड़ दिया है:

1) मैं कैसे संकलन libphonenumber सी ++ i386/ARMv6/ARMv7 आर्किटेक्चर साथ प्रयोग के लिए पुस्तकालय के लिए।

2) सी ++ लाइब्रेरी का उपयोग करते समय, मेरी धारणा सही है? क्या यह केवल ".a" फ़ाइल को आयात करने का मामला है जो संकलन से परिणाम देता है, और बस इसे मेरी xCode प्रोजेक्ट फ़ाइलों के शीर्षलेख में इंगित करता है? सी ++ पुस्तकालयों को शामिल करने और उपयोग करने और उद्देश्य-सी के अंदर xCode के अपने कार्यों तक पहुंचने के लिए क्या कदम हैं?

3) मैं LPNKit, libphonenumber के लिए एक उद्देश्य-सी पोर्ट मिला, लेकिन यह अधूरा है। क्या किसी ने इसके बारे में सुना है, और इसका उपयोग करके कोई किस्मत है? या क्या किसी के पास libphonenumber के लिए एक उद्देश्य-सी पोर्ट है जो पूर्ण, काम कर रहा है, इसे संकलित करने और इसे सही तरीके से स्थापित करने के निर्देशों के साथ?

इस पुस्तकालय को आईओएस पर काम करने के तरीके के बारे में कोई मदद या सलाह बहुत सराहना की जाएगी।

अद्यतन:

मैं libphonenumber की जावास्क्रिप्ट संस्करण का उपयोग कर, मेरी बंडल करने के लिए सभी फ़ाइलें जोड़ने जावास्क्रिप्ट लाइब्रेरियों सभी संदर्भित सहित और UIWebView और stringByEvaluatingJavaScriptFromString का उपयोग कर कार्यों को चलाने के लिए समाप्त हो गया। आप UIWebview को जावास्क्रिप्ट लाइब्रेरी ऑनलाइन भी संदर्भित कर सकते हैं (मुझे बस इंटरनेट कनेक्शन पर निर्भर न होने के लिए स्थानीय सब कुछ चाहिए)।

यहाँ मैं क्या किया का एक नमूना है:

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]; 

परिणाम चर मुझे स्वरूपित संख्या हो जाता है।

मुझे उम्मीद है कि मेरे द्वारा किए गए एक ही मुद्दे में भाग लेने वाले किसी भी व्यक्ति की सहायता करें।

+0

आप इसे कैसे पुन: संयोजित किया था और निर्भरता आप क्या कर रहे हैं? – LordT

+0

सबसे पहले मैंने "i386" को "CMAKE_OSX_ARCHITECTURES: STRING =" को "cmakeCache.txt" फ़ाइल में cmake प्रक्रिया के लिए लगाया, और फिर पुन: संकलित किया। आश्रित पुस्तकालय [बूस्ट] (http://www.boost.org/), [प्रोटोबफ] (http://code.google.com/p/protobuf/), और [googletest] (http: // कोड .google.com/पी/googletest /)। – YoCoh

+0

क्या आपको कभी भी उद्देश्य सी में libphonenumber ढांचे को पोर्ट करने में कोई सफलता मिली है? मुझे अपने आईओएस ऐप के लिए बिल्कुल वही चाहिए। यदि आप इसे मेरे साथ साझा करने के लिए बहुत दयालु होंगे, तो यह बहुत अच्छा होगा! अग्रिम में धन्यवाद। –

उत्तर

6

यह हमारी टीम द्वारा भेजा जा चुका है का एक नमूना ऊपर देखें। आप पा सकते हैं यह https://github.com/me2day/libPhoneNumber-iOS

+1

क्या इसमें बहुत आवश्यक AsYouTypeFormatter शामिल है? –

+0

हां, बधाई और कई thnks @hyukhur – qgicup

+0

क्यों आईओएस पुस्तकालय इतना धीमा है? मैं डुप्लिकेट संपर्क ढूंढने के लिए इसका उपयोग कर रहा हूं और 119 प्रविष्टियों को संसाधित करने में 23 सेकंड लगते हैं। इसके विपरीत, यदि मैं नामों की तुलना करता हूं, तो प्रोसेसिंग केवल 1 सेकंड लेती है। – kelin

2

1) सभी त्रुटियों को ठीक करें और हाथ के लिए सभी निर्भरताओं को फिर से संकलित करें। जैसा कि आपने पहले कहा था।

2) हां। kstenerud’s iOS-Universal-Framework

एक iOS फ्रेमवर्क आईओएस चौखटे का उपयोग के अनुसार मूल रूप से, सिवाय इसके कि वे स्थिर जुड़े हुए हैं नियमित रूप से गतिशील मैक ओएस एक्स चौखटे के रूप में ही कर रहे हैं।

अपनी परियोजना में एक ढांचा जोड़ने के लिए, इसे बस अपनी परियोजना में खींचें। जब आपके ढांचे से हेडर शामिल होते हैं, तो कोट्स के बजाय कोण ब्रैकेट सिंटैक्स का उपयोग करना याद रखें।

उदाहरण के लिए

, रूपरेखा "MyFramework" के साथ:

#import <MyFramework/MyClass.h>

यह सवाल Importing an external library in xcode - C++ इस तरह इस प्रकार है: आयात सी ++ पुस्तकालय, इसका इस्तेमाल, बिल्ट-इन चौखटे, आयात पर अपनी निर्भरता से त्रुटियों मिल उन अंतर्निहित ढांचे, सबकुछ काम करता है।

3) मैं विकल्प 1 के माध्यम से अपना रास्ता लड़ने के बजाय एलपीएनकिट में निवेश करूंगा। आप एलपीएनकिट से योगदान और लाभ दोनों ही कर सकते हैं। गिटहब एक अद्भुत जगह है और विकल्प 1 पर इसका बड़ा बढ़ावा यह है कि आपके पास एक और व्यक्ति है (या लोग!) जिनके पास एक ही लक्ष्य है और सभी इसे प्राप्त करने के लिए मिलकर काम करेंगे।

3

बस ध्यान दें कि libphonenumber जावास्क्रिप्ट लाइब्रेरी में Google की बंद लाइब्रेरी शामिल है।

तो आपको एक जावास्क्रिप्ट ऑब्जेक्ट में अपने जावास्क्रिप्ट कॉल को लपेटने पर विचार करना चाहिए और उसके बाद एक कुशल और हल्के वजन स्क्रिप्ट प्राप्त करने के लिए इसे बंद करने वाले निर्माता का उपयोग करके संकलित करना चाहिए। (इससे पहले कि संकलन बंद पुस्तकालय: 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); 
+0

क्या आप एक पूर्ण उदाहरण प्रदान कर सकते हैं? मैंने संकलित संस्करण 300k जोड़ा है और इसे वेबव्यू पर लोड किया है, लेकिन जब मैं विधियों को कॉल करता हूं तो यह कभी भी कुछ भी जवाब नहीं देता है। यह स्क्रिप्ट कुछ भी नहीं लौटाती है: phoneNumberParser ('NUMBER यहां', 'PT', '') –

संबंधित मुद्दे