Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create iOS- & OSX- library from Haxe and use it in native application?

I have an crossplatform implementation of own protocol, data-structures and logic written on Haxe. How I can build and use it in my enterprise-application (with native UI) for iOS and OSX?

like image 235
Alex Koz. Avatar asked Dec 07 '14 14:12

Alex Koz.


People also ask

Can I make my own iOS app?

With powerful developer tools like Swift and Xcode, every business can build amazing apps. Swift is a powerful, open source language that includes modern features developers love. And Xcode includes everything you need to create, build, and debug apps on iPhone, iPad, Mac, Apple Watch, and Apple TV.

Can I build an iOS app for free?

You can learn how to develop apps for Apple platforms for free without enrolling. With just an Apple ID, you can access Xcode, software downloads, documentation, sample code, forums, and Feedback Assistant, as well as test your apps on devices. If you don't already have an Apple ID, you can create one now.

What programming language is for iOS?

Swift is a robust and intuitive programming language created by Apple for building apps for iOS, Mac, Apple TV and Apple Watch.

How was iOS built?

They are written using iOS Software Development Kit (SDK) and, often, combined with Xcode, using officially supported programming languages, including Swift and Objective-C. Other companies have also created tools that allow for the development of native iOS apps using their respective programming languages.


1 Answers

How to create iOS- / OSX- library from Haxe and use it in native application

Actuality: 12.2014; HXCPP-ver.: 3.1.39~git.

Dependency: hxcpp

1. Haxe -> Library

Create a new Haxe-project with main class named HxModule.

src/HxModule.hx
class HxModule
{
    public static function main()
    {
        Sys.println('Hello from HxModule: "${test()}"');
    }

    @:headerCode
    public static function test():Int
    {
        return 101;
    }
}
build.hxml
-main HxModule
-cp src

-lib hxcpp

# this is for Mac OS X:
-D HXCPP_M64

# this is required on Windows. the "d" stands for debug:
#-D ABI=-MTd
--each

# at this phase we create a binary for tests
-cpp out/cpp/module


--next
# at this phase we create a binary for tests
-cpp out/cpp/module

-D static_link
-D actuate

Build: $ haxe buid.hxml

2. Xcode-project <- Library

  1. Create a new Xcode-project. It can be for OSX or iOS, Application or Cocoa Framework.
  2. In the 'Project' / 'Build Setting' / 'Header Search Paths' add paths to dependencies: (all paths must be full/not-relative and recursive)
    1. out/cpp/module/include - you have to fix it to full path;
    2. {your-haxelib-repo}/hxcpp/{version}/include - {here-yours};
    3. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
  3. In the 'Project' / 'Build Settings' / 'Apple LLVM 6.0 - Language - C++' change values:
    • 'C++ Language Dialect' = GNU++11 [-std=gnu++11]
    • 'C++ Standard Library' = libstdc++ (GNU C++ standard library)
  4. In the 'Project' / 'Build Phases' / 'Link Binary With Libraries':
    • HxModule.a
  5. Rename file: AppDelegate.m -> AppDelegate.mm
  6. Edit AppDelegate.mm:
AppDelegate.mm
#import "AppDelegate.h"
#import "HxModule.h"

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSLog(@"test: %d", ((int)HxModule_obj::test()));
}
@end

Additionally for autocomplete and better navigation you can add into Xcode-project the reference groups from directories:

  • include from output of Haxe;
  • include from haxelib hxcpp.
Possible problems:

At the time when this text was written only one possible issue. It can be solved by editing the file {haxelib:hxcpp}/include/hxcpp.h. Simply add a few lines at the beginning of the file:

{haxelib:hxcpp}/include/hxcpp.h
#ifndef HXCPP_H
#define HXCPP_H

// Standard headers ....

// Custom override by @suhinini
#define Class HxcppClass

// Basic mapping from haxe -> c++

typedef int Int;
typedef bool Bool;


// Windows hack
#define NOMINMAX


#ifdef _MSC_VER
   #include <typeinfo.h>
   namespace hx { typedef ::type_info type_info; }
...

see after // Standard headers .....

Example project.

like image 159
4 revs, 2 users 99% Avatar answered Nov 08 '22 12:11

4 revs, 2 users 99%