OpenFL, рднрд╛рдЧ рджреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрд╣ рд▓реЙрд░реЗрдВрдЯ рдмреЗрдбреБрдмрд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдУрдкрдирдПрдлрдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рджреЗрд╢реА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (рд▓рд┐рдирдХреНрд╕ / рд╡рд┐рдВрдбреЛрдЬ, рдПрдВрдбреНрд░реЙрдЗрдб, рдЖрдИрдУрдПрд╕) рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреНрд╡реАрдЯ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рд╣рдо рдХреНрдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ:


рдХреНрдпрд╛ рдХрд░реЗрдВ?


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NME рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, Build.xml рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рджрд┐рдЦрддреА рд╣реИ, рд╣рдореЗрдВ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЖрдЗрдП рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рд╢рд╛рдорд┐рд▓ / Util.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреНрд╡реАрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдмреМрджреНрдзрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдЬ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВ)ред
namespace testextension { int SampleMethod(int inputValue); bool Tweet(const char* msg); } 

рдЕрдм рд╣рдореЗрдВ iphone рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 cd project mkdir iPhone 

рдПрдХ iPhone / Tweet.mm рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
 #import <Foundation/Foundation.h> #import <Twitter/Twitter.h> namespace testextension { bool Tweet(const char* message){ //       Objective-C //        //        //          :) NSString* str = [[NSString alloc] initWithUTF8String:message]; TWTweetComposeViewController* tweetView = [[TWTweetComposeViewController alloc] init]; [tweetView setInitialText:str]; TWTweetComposeViewControllerCompletionHandler completionHandler = ^(TWTweetComposeViewControllerResult result) { [[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES]; }; [tweetView setCompletionHandler:completionHandler]; [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:tweetView animated:YES]; return true; } } 

рдФрд░ рдЯреНрд╡реАрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ haxe рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ / ExternalInterface.cpp:
 static value testextension_tweet(value message){ //  ,  message        const char* cStr = val_get_string(message); //    Tweet    haxe true  false if (testextension::Tweet(cStr)) return val_true; return val_false; } //   ,      DEFINE_PRIM(testextension_tweet, 1) 

DEFINE_PRIME, val_get_string, val_true рдФрд░ рдмрд╛рдХреА рд╕рдм hxcpp рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░ hx / CFFI.h рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

NME рд╕реЗ ExternalInterface.cpp рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣реИрдХреНрд╕ рд╣рд┐рд╕реНрд╕рд╛ TextExtension.hx рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 class TestExtension { //    private static var testextension_tweet = Lib.load("testextension", "testextension_tweet", 1); //       public static function tweet(message:String) : Bool { return testextension_tweet(message); } } 

рд╕рдВрдХрд▓рди рдХреИрд╕реЗ рдХрд░реЗрдВ


рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ / Build.xml рдлрд╝рд╛рдЗрд▓:
 <!--       ios --> <files id="iphone"> <file name="iPhone/Tweet.mm"/> </files> <!--        ,     : "Library TestExtension version dev does not have a neko dll for your system" --> <files id="mac"> <file name="Mac/Tweet.mm"/> </files> 

рдЖрдИрдбреА = рдПрдирдбреАрдПрд▓рдПрд▓ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА:
 <files id="mac" if="mac"/> <files id="iphone" if="ios"/> 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, hxcpp рдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреМрди рд╕реА рд░реВрдкрд░реЗрдЦрд╛ рдЬреЛрдбрд╝реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
 <dependency name="Twitter.framework" if="ios"/> 

рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред
 haxelib run hxcpp Build.xml -Dmac haxelib run hxcpp Build.xml -Diphoneos -DHXCPP_ARMV7 haxelib run hxcpp Build.xml -Diphonesim 

рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИ?


рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓ рдЬреЛрдбрд╝рд╛:
 TestExtension.tweet("This is my tweet message"); 

рдФрд░ рдЗрд╕реЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдФрд░ рдореЗрд░реЗ iOS рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛:
 cd TestApp openfl test project.xml iphone -simulator openfl test project.xml iphone 

IPhone рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдВрдбреЛ
рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рджреЗрд╢реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд╡реАрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣реИ рдирд╛ ?! :)

рдореИрдВ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА - рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб hxcpp рдФрд░ nme рдореЗрдВ, рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ред

рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░, рдореИрдВ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЕрд╕рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ ndl / рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ / obj рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдореИрдВрдиреЗ рддрдм рддрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдмрд┐рд▓реНрдб.xml рдФрд░ рд╢рд╛рдорд┐рд▓.xml рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдард┐рдирд╛рдИ hxcpp рдореЗрдВ Build.xml рдкреНрд░рд╛рд░реВрдк рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореА рд╣реИред рд▓реЗрдХрд┐рди, рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ, рдЗрд╕рд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

рдЕрдЧрд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ :)

рдореИрдВрдиреЗ рдЧреАрдердм рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдХрд┐ рдореЗрд░рд╛ рдЫреЛрдЯрд╛ рдпреЛрдЧрджрд╛рди рдЕрдиреНрдп рд╣реИрдХрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреА ... рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХрднреА-рдХрднреА рд╕рдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ;)

Source: https://habr.com/ru/post/In186722/


All Articles