Linux पर iOS के लिए C++ SDL एप्लिकेशन का निर्माण

Written by

in

इस नोट में, मैं Linux पर iOS के लिए C++ SDL एप्लिकेशन बनाने, सशुल्क Apple डेवलपर सदस्यता के बिना IPA संग्रह पर हस्ताक्षर करने और जेलब्रेक के बिना macOS का उपयोग करके इसे एक साफ़ डिवाइस (iPad) पर इंस्टॉल करने की प्रक्रिया का वर्णन करूंगा।

सबसे पहले, आइए Linux के लिए बिल्ड टूलचेन इंस्टॉल करें:
https://github.com/tpoechtrager/cctools-port

टूलचेन को रिपॉजिटरी से डाउनलोड करना होगा, फिर इंस्टॉलेशन पूरा करने के लिए गोडोट इंजन वेबसाइट पर दिए गए निर्देशों का पालन करें:
https://docs.godotengine.org/ru/latest/development/compiling/cross-compiling_for_ios_on_linux.html

फिलहाल, आपको cctools-port बनाने के लिए Xcode dmg डाउनलोड करना होगा और वहां से sdk को कॉपी करना होगा। इस चरण को macOS पर पूरा करना आसान है; बस स्थापित Xcode से आवश्यक sdk फ़ाइलों की प्रतिलिपि बनाएँ। सफल असेंबली के बाद, टर्मिनल में क्रॉस-कंपाइलर टूलचेन का पथ शामिल होगा।
इसके बाद, आप iOS के लिए SDL एप्लिकेशन बनाना शुरू कर सकते हैं। चलिए cmake खोलें और C++ कोड बनाने के लिए आवश्यक परिवर्तन जोड़ें:

SET(CMAKE_SYSTEM_NAME Darwin)
SET(CMAKE_C_COMPILER arm-apple-darwin11-clang)
SET(CMAKE_CXX_COMPILER arm-apple-darwin11-clang++)
SET(CMAKE_LINKER arm-apple-darwin11-ld)

अब आप सेमेक का उपयोग करके संकलन कर सकते हैं और बना सकते हैं, लेकिन क्रॉस-कंपाइलर टूलचेन में $PATH जोड़ना न भूलें:


PATH=$PATH:~/Sources/cctools-port/usage_examples/ios_toolchain/target/bin

फ्रेमवर्क और एसडीएल के साथ सही लिंकिंग के लिए, हम उन्हें सीएमके में लिखते हैं, उदाहरण के लिए गेम स्पेस जगुआर की निर्भरताएँ:


target_link_libraries(
${FSEGT_PROJECT_NAME}
${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/libclang_rt.ios.a
${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/libSDL2.a
${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/libSDL2_mixer.a
${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/libSDL2_image.a
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/CoreServices.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/ImageIO.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/Metal.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/AVFoundation.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/GameController.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/CoreMotion.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/CoreGraphics.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/AudioToolbox.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/CoreAudio.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/QuartzCore.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/OpenGLES.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/UIKit.framework"
"${FLAME_STEEL_PROJECT_ROOT_DIRECTORY}/scripts/buildScripts/ios/resources/libs/Foundation.framework"
)

मेरे मामले में, SDL, SDL_Image, SDL_mixer लाइब्रेरीज़ को स्टैटिक लिंकिंग के लिए पहले से ही macOS पर Xcode में संकलित किया गया है; फ्रेमवर्क Xcode से कॉपी किया गया। libclang_rt.ios.a लाइब्रेरी भी जोड़ी गई है, जिसमें iOS-विशिष्ट रनटाइम कॉल शामिल हैं, उदाहरण के लिए isOSVersionAtLeast। ओपनजीएल ईएस के साथ काम करने के लिए एक मैक्रो शामिल है, जो एंड्रॉइड के समान मोबाइल संस्करण में असमर्थित कार्यों को अक्षम करता है।
सभी निर्माण समस्याओं को हल करने के बाद, आपको हाथ के लिए असेंबल की गई बाइनरी मिलनी चाहिए। इसके बाद, आइए जेलब्रेक के बिना डिवाइस पर असेंबल बाइनरी चलाने पर विचार करें।
MacOS पर, डेवलपर प्रोग्राम के लिए भुगतान किए बिना, Xcode इंस्टॉल करें, Apple पोर्टल पर पंजीकरण करें। Xcode में एक खाता जोड़ें -> प्राथमिकताएँ -> खाते, एक रिक्त एप्लिकेशन बनाएं और वास्तविक डिवाइस पर बनाएं। असेंबली के दौरान, डिवाइस आपके निःशुल्क डेवलपर खाते में जोड़ दिया जाएगा। असेंबली और लॉन्च के बाद, आपको संग्रह बनाने की आवश्यकता है; ऐसा करने के लिए, जेनेरिक iOS डिवाइस और उत्पाद चुनें -> पुरालेख। एक बार संग्रह बन जाने के बाद, उसमें से Embedded.mobileprovision और PkgInfo फ़ाइलें निकालें। बिल्ड लॉग से डिवाइस तक, सही हस्ताक्षर कुंजी के साथ कोडसाइन लाइन ढूंढें, एक्सटेंशन ऐप.xcent के साथ एंटाइटेलमेंट फ़ाइल का पथ, इसे कॉपी करें।
संग्रह से .app फ़ोल्डर की प्रतिलिपि बनाएँ, संग्रह में बाइनरी को Linux में क्रॉस-कंपाइलर द्वारा संकलित एक से बदलें (उदाहरण के लिए, SpaceJaguar.app/SpaceJaguar), फिर .app में आवश्यक संसाधन जोड़ें, संग्रह से .app में PkgInfo और एम्बेडेड.mobileprovision फ़ाइलों की अखंडता की जाँच करें, यदि आवश्यक हो तो फिर से कॉपी करें। हम कोडसाइन कमांड – का उपयोग करके .app पर पुनः हस्ताक्षर करते हैं। कोडसाइन को साइन के लिए एक इनपुट कुंजी की आवश्यकता होती है, एंटाइटेलमेंट फ़ाइल का पथ (.plist एक्सटेंशन के साथ इसका नाम बदला जा सकता है)
पुन: हस्ताक्षर करने के बाद, एक पेलोड फ़ोल्डर बनाएं, .app एक्सटेंशन वाले फ़ोल्डर को वहां ले जाएं, रूट में पेलोड के साथ एक ज़िप संग्रह बनाएं, .ipa एक्सटेंशन के साथ संग्रह का नाम बदलें। उसके बाद, Xcode में, उपकरणों की सूची खोलें और नए आईपीए को डिवाइस के अनुप्रयोगों की सूची में खींचें और छोड़ें; Apple कॉन्फिगरेटर 2 के माध्यम से इंस्टॉलेशन इस विधि के लिए काम नहीं करता है। यदि पुन: हस्ताक्षर सही ढंग से किया जाता है, तो नए बाइनरी वाला एप्लिकेशन 7-दिवसीय प्रमाणपत्र के साथ iOS डिवाइस (उदाहरण के लिए, iPad) पर इंस्टॉल किया जाएगा, यह परीक्षण अवधि के लिए पर्याप्त है।

स्रोत

https://github.com/tpoechtrager/cctools-port

https://docs.godotengine.org/ru/latest/development/compiling/cross-compiling_for_ios_on_linux.html

https://jonnyzzz.com/blog/2018/06/13/link-error-3/

https://stackoverflow.com/questions/6896029/re-sign-ipa-iphone

https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *