Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alibaba/wax
Wax is a framework that lets you write native iPhone apps in Lua.
https://github.com/alibaba/wax
Last synced: 3 months ago
JSON representation
Wax is a framework that lets you write native iPhone apps in Lua.
- Host: GitHub
- URL: https://github.com/alibaba/wax
- Owner: alibaba
- License: mit
- Fork: true (probablycorey/wax)
- Created: 2015-10-14T16:26:18.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2019-04-22T07:59:07.000Z (over 5 years ago)
- Last Synced: 2024-07-25T22:15:16.112Z (3 months ago)
- Language: Objective-C
- Homepage: http://github.com/probablycorey/wax
- Size: 5.25 MB
- Stars: 1,840
- Watchers: 120
- Forks: 280
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
Wax is being maintained by Alibaba
----------[![Join the chat at https://gitter.im/alibaba/wax](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/alibaba/wax?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Thanks to @probablycorey for creating such a great project.
Wax is the best bridge between Lua and Objective-C, we will be maintaining it here. We have fixed a lot of issues such as 64-bit support and thread-safety. We have also added many features such as converting Lua functions to OC blocks, calling OC blocks in Lua, getting/setting private ivars, built-in commonly used C functions, and even Lua code debugging.Wax
---Wax is a framework that lets you write native iPhone apps in
[Lua](http://www.lua.org/about.html). It bridges Objective-C and Lua using the
Objective-C runtime. With Wax, **anything** you can do in Objective-C is **automatically**
available in Lua! What are you waiting for, give it a shot!Why write iPhone apps in Lua?
-----------------------------I love writing iPhone apps, but would rather write them in a dynamic language than in Objective-C. Here
are some reasons why many people prefer Lua + Wax over Objective-C...* Automatic Garbage Collection! Gone are the days of alloc, retain, and release.
* Less Code! No more header files, no more static types, array and dictionary literals!
Lua enables you to get more power out of less lines of code.* Access to every Cocoa, UITouch, Foundation, etc.. framework, if it's written in Objective-C,
Wax exposes it to Lua automatically. All the frameworks you love are all available to you!* Super easy HTTP requests. Interacting with a REST webservice has never been eaiser
* Lua has closures, also known as blocks! Anyone who has used these before knows how powerful they can be.
* Lua has a build in Regex-like pattern matching library.
Examples
--------For some simple Wax apps, check out the [examples folder](https://github.com/alibaba/wax/tree/master/examples).
How would I create a UIView and color it red?
``` lua
-- forget about using alloc! Memory is automatically managed by Wax
view = UIView:initWithFrame(CGRect(0, 0, 320, 100))-- use a colon when sending a message to an Objective-C Object
-- all methods available to a UIView object can be accessed this way
view:setBackgroundColor(UIColor:redColor())
```What about methods with multiple arguments?
``` lua
-- Just add underscores to the method name, then write the arguments like
-- you would in a regular C function
UIApplication:sharedApplication():setStatusBarHidden_animated(true, false)
```How do I send an array/string/dictionary
``` lua
-- Wax automatically converts array/string/dictionary objects to NSArray,
-- NSString and NSDictionary objects (and vice-versa)
images = {"myFace.png", "yourFace.png", "theirFace.png"}
imageView = UIImageView:initWithFrame(CGRect(0, 0, 320, 460))
imageView:setAnimationImages(images)
```What if I want to create a custom UIViewController?
``` lua
-- Created in "MyController.lua"
--
-- Creates an Objective-C class called MyController with UIViewController
-- as the parent. This is a real Objective-C object, you could even
-- reference it from Objective-C code if you wanted to.
waxClass{"MyController", UIViewController}function init()
-- to call a method on super, simply use self.super
self.super:initWithNibName_bundle("MyControllerView.xib", nil)
return self
endfunction viewDidLoad()
-- Do all your other stuff here
end
```You said HTTP calls were easy, I don't believe you...
``` lua
url = "http://search.twitter.com/trends/current.json"-- Makes an asyncronous call, the callback function is called when a
-- response is received
wax.http.request{url, callback = function(body, response)
-- request is just a NSHTTPURLResponse
puts(response:statusCode())-- Since the content-type is json, Wax automatically parses it and places
-- it into a Lua table
puts(body)
end}
```Since Wax converts NSString, NSArray, NSDictionary and NSNumber to native Lua values, you have to force objects back to Objective-C sometimes. Here is an example.
``` lua
local testString = "Hello lua!"
local bigFont = UIFont:boldSystemFontOfSize(30)
local size = toobjc(testString):sizeWithFont(bigFont)
puts(size)
```
How do I convert Lua functions to Objective-C blocks? [see more detail](https://github.com/alibaba/wax/wiki/Block).``` lua
UIView:animateWithDuration_animations_completion(1,
toblock(
function()
label:setCenter(CGPoint(300, 300))
end
),
toblock(
function(finished)
print('lua animations completion ' .. tostring(finished))
end
,{"void", "BOOL"})
)---OC method is -(void)testReturnIdWithFirstIdBlock:(id(^)(id aFirstId, BOOL aBOOL, int aInt, NSInteger aInteger, float aFloat, CGFloat aCGFloat, id aId))block
self:testReturnIdWithFirstIdBlock(
toblock(
function(aFirstId, aBOOL, aInt, aInteger, aFloat, aCGFloat, aId)
print("aFirstId=" .. tostring(aFirstId))
-- assert(aFirstId == self, "aFirstInt不等")
assertResult(self, aBOOL, aInt, aInteger, aFloat, aCGFloat, aId)
print("LUA TEST SUCCESS: testReturnIdWithFirstIdBlock")
return aFirstId
end
, {"id","id", "BOOL", "int", "NSInteger", "float", "CGFloat", "id"})
)
```What about calling Objective-C blocks?[see more detail](https://github.com/alibaba/wax/wiki/Block).
``` lua
--OC block type is id (^)(NSInteger, id, BOOL, CGFloat)
--just like lua function
local res = block(123456, aObject, true, 123.456);--or you can call like this:
local res = luaCallBlockWithParamsTypeArray(block, {"id","NSInteger", "id", "BOOL", "CGFloat"}, 123456, aObject, true, 123.456);
```What if my instance variables are privately implemented?
``` lua
print(self:view():getIvarInt("_countOfMotionEffectsInSubtree"))self:setIvar_withObject("_title", "abcdefg")
print(self:getIvarObject("_title"))self:setIvar_withObject("_infoDict", {k11="v11", k22="v22"})
print(toobjc(self:getIvarObject("_infoDict")))
```You want to call some C functions?
``` lua
luaSetWaxConfig({openBindOCFunction=true})--bind built-in C functiondispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
toblock(
function( )
print(string.format("dispatch_async"));
end)
);UIGraphicsBeginImageContext(CGSize(200,400));
UIApplication:sharedApplication():keyWindow():layer():renderInContext(UIGraphicsGetCurrentContext());
local aImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();local imageData =UIImagePNGRepresentation(aImage);
print("imageData.length=", imageData.length);
local image = aImage;
local data = UIImageJPEGRepresentation(image, 0.8);
print("data.length=", data:length());
```Lua code debug
------
Any way to debug my Lua code?
Ofcourse, you can use the powerfull ZeroBraneStudio to debug. [see more detail](https://github.com/alibaba/wax/tree/master/examples/LuaCodeDebug).Lua code in Xcode
------
[Wax-In-Xcode](https://github.com/intheway/Wax-In-Xcode) plugin can help you for Lua code format, syntax highlighting and code completion.Watch OS
------
Can Wax run on watch OS?
Thanks to the cross platform characteristics of Lua, Wax can run on watch OS certainly. see tools/WaxWatchFramework and examples/WaxWatchExampleSwift
------
Can Wax work in Swift?
Swift has no runtime feature, but it's compatible with Objective-c, so runtime method invoking and swizzing can be used in some conditions. [see more detail](https://github.com/alibaba/wax/wiki/UseInSwift).```
waxClass{"SwiftExample.TestSwiftVC"}
function viewDidLoad(self)
self:ORIGviewDidLoad();
--call class method
objc_getClass("SwiftExample.TestSwiftVC"):testClassReturnVoidWithaId(self:view())
end
function tableView_didSelectRowAtIndexPath(self, tableView, indexPath)
local vc = objc_getClass("SwiftExample.TestBSwiftVC"):initWithNibName_bundle("TestBSwiftVC", nil);
self:navigationController():pushViewController_animated(vc, true);
end
```Use with cocoapods
----------
see demo in `examples/InstallationExample/InstallWithCocoaPods` .
* add `pod 'wax', :git=>'https://github.com/alibaba/wax.git', :tag=>'1.1.0'` to your podfile. (tag in your needs)
* then you can run lua code.``` lua
wax_start(nil, nil);
wax_runLuaString("print('hello wax')");
```
Setup & Tutorials
-----------------[Setting up Wax](https://github.com/alibaba/wax/wiki/Installation)
[How does Wax work?](https://github.com/alibaba/wax/wiki/Overview)
[Simple Twitter client in Wax](https://github.com/alibaba/wax/wiki/Twitter-example)
Which API's are included?
-------------------------They all are! I can't stress this enough, anything that is written in Objective-C (even external frameworks) will work automatically in Wax! UIAcceleration works like UIAcceleration, MapKit works like MapKit, GameKit works like GameKit, Snozberries taste like Snozberries!
Created By
----------
Corey Johnson (probablycorey at gmail dot com)More
----
* [Feature Requests? Bugs?](https://github.com/alibaba/wax/issues) - Issue tracking and release planning.
* [Mailing List](http://groups.google.com/group/iphonewax)
* Quick questions or issues? Send an email to [@Zhengwei Yin (Junzhan)](mailto:[email protected])
* Communicate in gitter: [https://gitter.im/alibaba/wax](https://gitter.im/alibaba/wax)
* Communicate in QQ group: 196306834Contribute
----------
[@Zhengwei Yin (Junzhan)](mailto:[email protected])
Fork it, change it, commit it, push it, send pull request; instant glory!The MIT License
---------------
Wax is Copyright (C) 2009 Corey Johnson See the file LICENSE for information of licensing and distribution.