motion-objc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +10 -0
- data/Gemfile +5 -0
- data/README.md +48 -0
- data/Rakefile +14 -0
- data/app/app_delegate.rb +5 -0
- data/lib/motion/project/objc/version.rb +7 -0
- data/lib/motion-objc.rb +88 -0
- data/motion-objc.gemspec +16 -0
- data/objc/NSData+MD5Digest.h +18 -0
- data/objc/NSData+MD5Digest.m +39 -0
- data/spec/lib_spec.rb +5 -0
- data/vendor/MotionObjC/build-iPhoneSimulator/libMotionObjC.a +0 -0
- metadata +75 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# RubyMotion Objective-C (motion-objc)
|
2
|
+
|
3
|
+
Include simple Objective-C files in your motion project, without the need of manually
|
4
|
+
create project file.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
```
|
9
|
+
gem install motion-objc
|
10
|
+
```
|
11
|
+
|
12
|
+
## Setup
|
13
|
+
|
14
|
+
Add following lines to your project ```Rakefile```
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
require 'rubygems'
|
18
|
+
require 'motion-objc'
|
19
|
+
```
|
20
|
+
|
21
|
+
Add Objective-C files to your project. e.g. Create a objc folder and add *.h/*.m
|
22
|
+
files there.
|
23
|
+
|
24
|
+
Tell motion-objc where your Objective-C files located using ```app.objc_files```
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
Motion::Project::App.setup do |app|
|
28
|
+
app.name = 'MotionObjCTest'
|
29
|
+
app.identifier = 'hk.ignition.objc'
|
30
|
+
app.version = '1.0.0'
|
31
|
+
app.objc_files = Dir.glob("objc/**/*.*")
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
## How it works?
|
36
|
+
|
37
|
+
It generate a XCode project with static library target with all your specified
|
38
|
+
Objective-C files, and include it in your RubyMotion project.
|
39
|
+
|
40
|
+
motion-objc is designed for adding small snippets written in Objective-C to RubyMotion
|
41
|
+
project. If you need to include more complex code base, you should create a
|
42
|
+
[CocoaPods Spec](https://github.com/CocoaPods/CocoaPods) instead.
|
43
|
+
|
44
|
+
## License
|
45
|
+
|
46
|
+
Copyright 2012, Francis Chong, Ignition Soft.
|
47
|
+
|
48
|
+
This project is released in MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
$:.unshift("/Library/RubyMotion/lib")
|
3
|
+
require 'motion/project'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'xcodeproj'
|
7
|
+
require 'motion-objc'
|
8
|
+
|
9
|
+
Motion::Project::App.setup do |app|
|
10
|
+
app.name = 'MotionObjCTest'
|
11
|
+
app.identifier = 'hk.ignition.objc'
|
12
|
+
app.version = '1.0.0'
|
13
|
+
app.objc_files = Dir.glob("objc/**/*.*")
|
14
|
+
end
|
data/app/app_delegate.rb
ADDED
data/lib/motion-objc.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "motion/project/objc/version"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
unless defined?(Motion::Project::Config)
|
5
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
6
|
+
end
|
7
|
+
|
8
|
+
module Motion::Project
|
9
|
+
class Config
|
10
|
+
# variables :objc_files should work, but it isnt
|
11
|
+
attr_accessor :objc_files
|
12
|
+
VARS << 'objc_files'
|
13
|
+
end
|
14
|
+
|
15
|
+
class << App
|
16
|
+
def setup_with_motion_objc
|
17
|
+
setup_without_motion_objc do |app|
|
18
|
+
yield app
|
19
|
+
|
20
|
+
if app.objc_files && app.objc_files != []
|
21
|
+
generator = LibGenerator.new(app.objc_files)
|
22
|
+
generator.vendor(app)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
alias setup_without_motion_objc setup
|
28
|
+
alias setup setup_with_motion_objc
|
29
|
+
end
|
30
|
+
|
31
|
+
class LibGenerator
|
32
|
+
attr_accessor :project_path
|
33
|
+
attr_accessor :files
|
34
|
+
|
35
|
+
def initialize(files=[])
|
36
|
+
@files = files
|
37
|
+
end
|
38
|
+
|
39
|
+
def vendor(app)
|
40
|
+
generate(app)
|
41
|
+
app.vendor_project @project_path, :xcode,
|
42
|
+
:target => 'MotionObjC',
|
43
|
+
:products => ['libMotionObjC.a']
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def headers_path
|
49
|
+
@files.select {|f| f =~ /\.h$/}.collect{|f| File.dirname(f) }.uniq
|
50
|
+
end
|
51
|
+
|
52
|
+
# OTHER_LDFLAGS for the library
|
53
|
+
def ld_flags(app)
|
54
|
+
flags = []
|
55
|
+
flags << '-ObjC'
|
56
|
+
flags += app.frameworks.collect{|f| "-framework #{f}"}
|
57
|
+
flags.join(" ")
|
58
|
+
end
|
59
|
+
|
60
|
+
# Generate project file
|
61
|
+
def generate(app)
|
62
|
+
@project_path = Pathname.new(File.expand_path(app.project_dir + '/vendor/MotionObjC'))
|
63
|
+
FileUtils.mkdir_p(@project_path)
|
64
|
+
|
65
|
+
# basic build config
|
66
|
+
@config = {
|
67
|
+
'SDKROOT' => 'iphoneos',
|
68
|
+
'ARCHS' => "$(ARCHS_STANDARD_32_BIT)",
|
69
|
+
'PUBLIC_HEADERS_FOLDER_PATH' => "$(TARGET_NAME)",
|
70
|
+
'IPHONEOS_DEPLOYMENT_TARGET' => app.deployment_target || "5.1",
|
71
|
+
'HEADER_SEARCH_PATHS' => headers_path,
|
72
|
+
'OTHER_LDFLAGS' => ld_flags(app)
|
73
|
+
}
|
74
|
+
|
75
|
+
@project = Xcodeproj::Project.new
|
76
|
+
@target = @project.targets.new_static_library('MotionObjC')
|
77
|
+
@target.buildConfigurations.each do |config|
|
78
|
+
config.buildSettings.merge!(@config)
|
79
|
+
end
|
80
|
+
@files.each do |file|
|
81
|
+
full_path = File.expand_path(app.project_dir + '/' + file)
|
82
|
+
@target.add_source_file(Pathname.new(full_path).relative_path_from(@project_path))
|
83
|
+
end
|
84
|
+
|
85
|
+
@project.save_as(File.join(@project_path, 'MotionObjC.xcodeproj'))
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/motion-objc.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../lib/motion/project/objc/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.authors = ["Francis Chong"]
|
5
|
+
gem.email = ["francis@ignition.hk"]
|
6
|
+
gem.description = "Simply include Objective-C files in your RubyMotion projects"
|
7
|
+
gem.summary = "Simply include Objective-C files in your RubyMotion projects"
|
8
|
+
gem.homepage = "https://github.com/siuying/moiton-objc"
|
9
|
+
|
10
|
+
gem.files = `git ls-files`.split($\)
|
11
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
12
|
+
gem.name = "motion-objc"
|
13
|
+
gem.require_paths = ["lib"]
|
14
|
+
gem.version = Motion::Project::ObjC::VERSION
|
15
|
+
gem.add_dependency 'xcodeproj'
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
//
|
2
|
+
// NSData+MD5Digest.h
|
3
|
+
// NSData+MD5Digest
|
4
|
+
//
|
5
|
+
// Created by Francis Chong on 12年6月5日.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import <Foundation/Foundation.h>
|
9
|
+
|
10
|
+
@interface NSData (MD5Digest)
|
11
|
+
|
12
|
+
+(NSData *)MD5Digest:(NSData *)input;
|
13
|
+
-(NSData *)MD5Digest;
|
14
|
+
|
15
|
+
+(NSString *)MD5HexDigest:(NSData *)input;
|
16
|
+
-(NSString *)MD5HexDigest;
|
17
|
+
|
18
|
+
@end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
//
|
2
|
+
// NSData+MD5Digest.m
|
3
|
+
// NSData+MD5Digest
|
4
|
+
//
|
5
|
+
// Created by Francis Chong on 12年6月5日.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import "NSData+MD5Digest.h"
|
9
|
+
#import <CommonCrypto/CommonDigest.h>
|
10
|
+
|
11
|
+
@implementation NSData (MD5)
|
12
|
+
|
13
|
+
+(NSData *)MD5Digest:(NSData *)input {
|
14
|
+
unsigned char result[CC_MD5_DIGEST_LENGTH];
|
15
|
+
|
16
|
+
CC_MD5(input.bytes, input.length, result);
|
17
|
+
return [[NSData alloc] initWithBytes:result length:CC_MD5_DIGEST_LENGTH];
|
18
|
+
}
|
19
|
+
|
20
|
+
-(NSData *)MD5Digest {
|
21
|
+
return [NSData MD5Digest:self];
|
22
|
+
}
|
23
|
+
|
24
|
+
+(NSString *)MD5HexDigest:(NSData *)input {
|
25
|
+
unsigned char result[CC_MD5_DIGEST_LENGTH];
|
26
|
+
|
27
|
+
CC_MD5(input.bytes, input.length, result);
|
28
|
+
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
|
29
|
+
for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
|
30
|
+
[ret appendFormat:@"%02x",result[i]];
|
31
|
+
}
|
32
|
+
return ret;
|
33
|
+
}
|
34
|
+
|
35
|
+
-(NSString *)MD5HexDigest {
|
36
|
+
return [NSData MD5HexDigest:self];
|
37
|
+
}
|
38
|
+
|
39
|
+
@end
|
data/spec/lib_spec.rb
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: motion-objc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Francis Chong
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-06-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: xcodeproj
|
16
|
+
requirement: &2153979520 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153979520
|
25
|
+
description: Simply include Objective-C files in your RubyMotion projects
|
26
|
+
email:
|
27
|
+
- francis@ignition.hk
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- README.md
|
35
|
+
- Rakefile
|
36
|
+
- app/app_delegate.rb
|
37
|
+
- lib/motion-objc.rb
|
38
|
+
- lib/motion/project/objc/version.rb
|
39
|
+
- motion-objc.gemspec
|
40
|
+
- objc/NSData+MD5Digest.h
|
41
|
+
- objc/NSData+MD5Digest.m
|
42
|
+
- spec/lib_spec.rb
|
43
|
+
- vendor/MotionObjC/build-iPhoneSimulator/libMotionObjC.a
|
44
|
+
homepage: https://github.com/siuying/moiton-objc
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
hash: -1849511930686443899
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
hash: -1849511930686443899
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.8.10
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Simply include Objective-C files in your RubyMotion projects
|
74
|
+
test_files:
|
75
|
+
- spec/lib_spec.rb
|