рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдпрд╣ рд▓реЙрд░реЗрдВрдЯ рдмреЗрдбреБрдмрд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдУрдкрдирдПрдлрдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рджреЗрд╢реА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (рд▓рд┐рдирдХреНрд╕ / рд╡рд┐рдВрдбреЛрдЬ, рдПрдВрдбреНрд░реЙрдЗрдб, рдЖрдИрдУрдПрд╕) рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреНрд╡реАрдЯ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рд╣рдо рдХреНрдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ:
- рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП
- рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рд╣реЗрдХреНрд╕ рдХреЛрдб рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ
- iOS рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреИрд╕реЗ рдХрд░реЗрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреНрд╡рд┐рдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде)
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
NME рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ,
Build.xml рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:
- рд╢рд╛рдорд┐рд▓ / рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп / рдФрд░ plaforms рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
- рд╕рд╛рдорд╛рдиреНрдп / рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░ c ++ рдХреЛрдб (рдХрдо рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░, рд╣рдо # рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #if рдкрд░рд┐рднрд╛рд╖рд┐рдд (HX_xxxx) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
- рд╕рд╛рдорд╛рдиреНрдп / ExternalIterface.cpp рд░рдирдЯрд╛рдЗрдо рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ (DEFINE_PRIM)
- рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (iPhone, mac, windows рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рджрд┐рдЦрддреА рд╣реИ, рд╣рдореЗрдВ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рд╢рд╛рдорд┐рд▓ / 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){
DEFINE_PRIME, val_get_string, val_true рдФрд░ рдмрд╛рдХреА рд╕рдм hxcpp рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░
hx / CFFI.h рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред
NME рд╕реЗ
ExternalInterface.cpp рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╣реИрдХреНрд╕ рд╣рд┐рд╕реНрд╕рд╛ TextExtension.hx рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
class TestExtension {
рд╕рдВрдХрд▓рди рдХреИрд╕реЗ рдХрд░реЗрдВ
рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ / Build.xml рдлрд╝рд╛рдЗрд▓:
<files id="iphone"> <file name="iPhone/Tweet.mm"/> </files> <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

рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рджреЗрд╢реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд╡реАрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣реИ рдирд╛ ?! :)
рдореИрдВ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА - рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб hxcpp рдФрд░ nme рдореЗрдВ, рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ред
рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░, рдореИрдВ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЕрд╕рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ ndl / рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ / obj рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдореИрдВрдиреЗ рддрдм рддрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдмрд┐рд▓реНрдб.xml рдФрд░ рд╢рд╛рдорд┐рд▓.xml рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдард┐рдирд╛рдИ hxcpp рдореЗрдВ Build.xml рдкреНрд░рд╛рд░реВрдк рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореА рд╣реИред рд▓реЗрдХрд┐рди, рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ, рдЗрд╕рд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
рдЕрдЧрд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ :)
рдореИрдВрдиреЗ
рдЧреАрдердм рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдХрд┐ рдореЗрд░рд╛ рдЫреЛрдЯрд╛ рдпреЛрдЧрджрд╛рди рдЕрдиреНрдп рд╣реИрдХрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреА ... рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХрднреА-рдХрднреА рд╕рдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ;)