ib 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +110 -8
- data/ib.gemspec +1 -1
- data/lib/ib/project.rb +10 -7
- data/lib/ib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9877eb0ab9be9bf201b6f9dbe23416c7f5b5439
|
4
|
+
data.tar.gz: 5e6aab594f8197db1be1da81d80dcfee9104fbe7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8876b001e5e7a8bc17fb19a5c84bd4d721c9e44d4f3ceb3540f7e7f78e149156499460c878eb550ab65d7d2b40b209b669e43e8a9891f62b419069a9815134b6
|
7
|
+
data.tar.gz: 32f58ddd91216fc1cf44af708597bc411356ab438f4199662d0d23d509fb4cf4b6a306bfdfeaa3375144747e4f9e9a07dfdbb2dcc76bd17e1f92c05121e89f7e
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# IB
|
2
2
|
|
3
|
-
RubyMotion
|
3
|
+
RubyMotion Interface Builder support (yes, with outlets)
|
4
4
|
|
5
5
|
<a href='http://spellhub.com/projects/project/7'><img src="http://spellhub.com/projects/status/7" height="18"></a>
|
6
|
-
[![Build Status](https://travis-ci.org/
|
6
|
+
[![Build Status](https://travis-ci.org/rubymotion/ib.png?branch=master)](https://travis-ci.org/rubymotion/ib)
|
7
7
|
|
8
|
-
[**Change Log**](https://github.com/
|
8
|
+
[**Change Log**](https://github.com/rubymotion/ib/wiki/Change-Log)
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
@@ -119,6 +119,103 @@ class HelloController < UIViewController
|
|
119
119
|
end
|
120
120
|
```
|
121
121
|
|
122
|
+
### Support for IBDesignable classes, and IBInspectable properties
|
123
|
+
###### Thanks to Robert Malko (aka malkomalko) for adding this feature!
|
124
|
+
|
125
|
+
To use this feature, you will need to create a simple framework using
|
126
|
+
Objective-C. Let's call our framework "DesignableKit". We'll define just one
|
127
|
+
public class, `DesignableView`, which will expose a `cornerRadius` property that
|
128
|
+
we want to be able to edit in Xcode, and have the results shown at design-time.
|
129
|
+
|
130
|
+
At a minimum, we need three files:
|
131
|
+
|
132
|
+
- Framework header, which defines version constants and includes the public headers. We'll call this `DesignableKit.h`
|
133
|
+
- At least one public header, e.g. `DesignableView.h`
|
134
|
+
- At least one implementation, e.g. `DesignableView.m`
|
135
|
+
|
136
|
+
mkdir -p frameworks/DesignableKit
|
137
|
+
touch frameworks/DesignableKit/DesignableKit.h
|
138
|
+
touch frameworks/DesignableKit/DesignableView.h
|
139
|
+
touch frameworks/DesignableKit/DesignableView.m
|
140
|
+
|
141
|
+
Add this framework to your project from the Rakefile, and add a new custom
|
142
|
+
option, introduced by **ib**:
|
143
|
+
|
144
|
+
app.vendor_project('frameworks/DesignableKit', :static, ib: true)
|
145
|
+
|
146
|
+
That `ib: true` option will be detected by **ib**, and that framework will be
|
147
|
+
included in the .xcodeproj that is created. So now let's write our custom view
|
148
|
+
code.
|
149
|
+
|
150
|
+
Unfortunately, we'll have to rely on objective-c for now. RubyMotion cannot yet
|
151
|
+
compile Swift files (RM 2.32 at the time of this writing), and we have not yet
|
152
|
+
added the ability to use a RubyMotion framework, *but this should be possible*!
|
153
|
+
|
154
|
+
###### DesignableKit.h
|
155
|
+
```objc
|
156
|
+
#import <UIKit/UIKit.h>
|
157
|
+
|
158
|
+
FOUNDATION_EXPORT double DesignableKitVersionNumber;
|
159
|
+
FOUNDATION_EXPORT const unsigned char DesignableKitVersionString[];
|
160
|
+
|
161
|
+
// import all the public headers of your framework
|
162
|
+
#import <DesignableKit/DesignableView.h>
|
163
|
+
```
|
164
|
+
###### DesignableView.h
|
165
|
+
```objc
|
166
|
+
#import <UIKit/UIKit.h>
|
167
|
+
|
168
|
+
IB_DESIGNABLE
|
169
|
+
@interface DesignableView : UIView
|
170
|
+
|
171
|
+
@property (nonatomic) IBInspectable CGFloat cornerRadius;
|
172
|
+
|
173
|
+
@end
|
174
|
+
```
|
175
|
+
|
176
|
+
###### DesignableView.m
|
177
|
+
```objc
|
178
|
+
// we make sure to call [self setup] from all the designated initializers (UIViews have *two*!)
|
179
|
+
#import "DesignableView.h"
|
180
|
+
|
181
|
+
@implementation DesignableView
|
182
|
+
|
183
|
+
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
|
184
|
+
if (self = [super initWithCoder:aDecoder]) {
|
185
|
+
[self setup];
|
186
|
+
}
|
187
|
+
return self;
|
188
|
+
}
|
189
|
+
|
190
|
+
- (instancetype)initWithFrame:(CGRect)frame{
|
191
|
+
if (self = [super initWithFrame:frame]) {
|
192
|
+
[self setup];
|
193
|
+
}
|
194
|
+
return self;
|
195
|
+
}
|
196
|
+
|
197
|
+
- (void)prepareForInterfaceBuilder {
|
198
|
+
self.backgroundColor = [UIColor whiteColor];
|
199
|
+
}
|
200
|
+
|
201
|
+
- (void)setup {
|
202
|
+
self.cornerRadius = 0;
|
203
|
+
}
|
204
|
+
|
205
|
+
- (void)setCornerRadius:(CGFloat)cornerRadius {
|
206
|
+
_cornerRadius = cornerRadius;
|
207
|
+
self.layer.cornerRadius = cornerRadius;
|
208
|
+
}
|
209
|
+
|
210
|
+
@end
|
211
|
+
```
|
212
|
+
|
213
|
+
Now open interface builder, and make your change!
|
214
|
+
|
215
|
+
rake ib
|
216
|
+
|
217
|
+
|
218
|
+
|
122
219
|
### Using Interface Builder
|
123
220
|
|
124
221
|
Running `rake ib` will create a ib.xcodeproj in the root of your app and open XCode. You can create Storyboards or nibs, and save them in your `resources` directory in order to be picked up by RubyMotion.
|
@@ -144,24 +241,29 @@ If you find your version of the `ib` gem is not current, try `bundle update ib`.
|
|
144
241
|
|
145
242
|
# Sample app
|
146
243
|
|
147
|
-
Here is [sample app](https://github.com/
|
244
|
+
Here is a [sample app](https://github.com/rubymotion/ib/tree/master/samples/ibsample) using a storyboard, by **yury**.
|
148
245
|
|
149
246
|
1. clone it
|
150
247
|
2. run `bundle`
|
151
248
|
3. run `rake ib` to change story board
|
152
249
|
4. run `rake` to run app in simulator
|
153
250
|
|
154
|
-
**Note** : this app
|
251
|
+
**Note** : this app was built for iOS 6.0
|
252
|
+
|
253
|
+
# IBDesignable Sample app
|
254
|
+
|
255
|
+
A [sample app](https://github.com/rubymotion/ib/tree/master/samples/ibdesignable) based on the code above. Written by **malkomalko**.
|
155
256
|
|
156
257
|
# Another Sample app
|
157
258
|
|
158
|
-
Here is [another sample app](https://github.com/hqmq/whereami)
|
259
|
+
Here is [another sample app](https://github.com/hqmq/whereami), by **hqmq**.
|
159
260
|
|
160
261
|
# OS X Sample app
|
161
262
|
|
162
|
-
Here is [OS X sample app](https://github.com/MarkVillacampa/motion-osx-ib)
|
263
|
+
Here is an [OS X sample app](https://github.com/MarkVillacampa/motion-osx-ib) by **MarkVillacampa**
|
163
264
|
|
164
|
-
You can play around with it in the same way as the Sample app above. This sample
|
265
|
+
You can play around with it in the same way as the Sample app above. This sample
|
266
|
+
uses a single xib file rather than a storyboard.
|
165
267
|
|
166
268
|
## Contributing
|
167
269
|
|
data/ib.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
|
|
9
9
|
gem.homepage = "https://github.com/yury/ib"
|
10
10
|
gem.licenses = ['BSD']
|
11
11
|
|
12
|
-
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.files = `git ls-files`.split($\).reject { |f| f =~ %r{samples/} }
|
13
13
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
14
14
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
15
|
gem.name = "ib"
|
data/lib/ib/project.rb
CHANGED
@@ -5,7 +5,9 @@ class IB::Project
|
|
5
5
|
|
6
6
|
IB_PROJECT_NAME = 'ib.xcodeproj'
|
7
7
|
DEFAULT_FRAMEWORKS = %W{QuartzCore CoreGraphics CoreData}
|
8
|
-
RESOURCE_EXTENSIONS = %W{
|
8
|
+
RESOURCE_EXTENSIONS = %W{
|
9
|
+
xcdatamodeld png jpg jpeg storyboard xib lproj ttf otf
|
10
|
+
}
|
9
11
|
|
10
12
|
def initialize options={}
|
11
13
|
@platform = options[:platform] || detect_platform
|
@@ -110,9 +112,7 @@ class IB::Project
|
|
110
112
|
target.add_system_framework framework
|
111
113
|
end
|
112
114
|
|
113
|
-
extra_frameworks.each
|
114
|
-
add_extra_framework framework
|
115
|
-
end
|
115
|
+
extra_frameworks.each { |framework| add_extra_framework framework }
|
116
116
|
end
|
117
117
|
|
118
118
|
def extra_frameworks
|
@@ -120,10 +120,13 @@ class IB::Project
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def add_extra_framework(framework)
|
123
|
-
|
124
|
-
|
123
|
+
deployment_target = Motion::Project::App.config.deployment_target
|
124
|
+
framework_name = framework.path.split('/').last
|
125
|
+
framework_group = project.new_group(framework_name)
|
125
126
|
framework_group.path = File.join(project_path, framework.path)
|
126
|
-
framework_target = project.new_target(
|
127
|
+
framework_target = project.new_target(
|
128
|
+
:framework, framework_name, platform, deployment_target)
|
129
|
+
|
127
130
|
Dir.glob("#{framework.path}/**/*.{h,m}") do |file|
|
128
131
|
file_ref = framework_group.new_file File.join(project_path, file)
|
129
132
|
framework_target.add_file_references([file_ref])
|
data/lib/ib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Korolev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: xcodeproj
|