rhodes 2.0.0 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/Manifest.txt +3 -1
- data/bin/rhodes-setup +1 -32
- data/lib/framework/erb.rb +3 -3
- data/lib/framework/rhodes.rb +2 -2
- data/lib/framework/version.rb +2 -2
- data/lib/rhodes.rb +2 -2
- data/platform/android/Rhodes/AndroidManifest.xml +3 -2
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_Rhodes.h +2 -2
- data/platform/android/Rhodes/jni/src/rhodes.cpp +7 -5
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +15 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +5 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +8 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +310 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +275 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +125 -322
- data/platform/android/build/RhodesSRC_build.files +23 -21
- data/platform/android/build/android.rake +40 -17
- data/platform/iphone/Info.plist +1 -1
- data/platform/iphone/rbuild/iphone.rake +58 -33
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +1 -1
- data/platform/shared/common/RhoPort.h +18 -3
- data/platform/shared/common/RhodesApp.cpp +76 -54
- data/platform/shared/common/StringConverter.h +3 -2
- data/platform/shared/common/stat.h +29 -4
- data/platform/shared/db/DBAdapter.cpp +2 -1
- data/platform/shared/db/DBAdapter.h +1 -1
- data/platform/shared/json/RJSONTokener.c +1 -1
- data/platform/shared/json/json_object.c +2 -2
- data/platform/shared/json/json_tokener.c +1 -1
- data/rhodes.gemspec +1 -1
- data/spec/phone_spec/app/Spec/contacts_spec.rb +10 -3
- data/spec/phone_spec/app/Spec/controller.rb +3 -3
- data/spec/phone_spec/app/Spec/mapview_spec.rb +3 -1
- data/spec/phone_spec/build.yml +2 -1
- metadata +6 -4
- data/rhobuild.yml +0 -39
@@ -1,40 +1,44 @@
|
|
1
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java
|
2
1
|
platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java
|
2
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
|
3
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
|
4
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
|
5
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
|
6
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
|
7
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
|
8
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
|
9
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
|
10
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
|
11
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
|
12
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java
|
13
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
|
14
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
|
15
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
|
16
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
|
17
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java
|
3
18
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java
|
4
19
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/FileList.java
|
5
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java
|
6
20
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java
|
7
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/
|
21
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java
|
8
22
|
platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePicker.java
|
9
23
|
platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePickerScreen.java
|
10
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
|
11
24
|
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java
|
12
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/
|
13
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
|
25
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
|
14
26
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java
|
15
27
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java
|
16
28
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java
|
17
29
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java
|
18
30
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java
|
19
31
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java
|
20
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
|
21
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
|
22
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
|
23
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
|
24
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactField.java
|
25
32
|
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java
|
33
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java
|
34
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java
|
35
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java
|
36
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactField.java
|
26
37
|
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java
|
27
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
|
28
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java
|
29
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
|
30
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
|
31
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
|
32
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
|
33
38
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSockAddr.java
|
34
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
|
35
39
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocket.java
|
40
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
|
36
41
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java
|
37
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
|
38
42
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/AboutDialog.java
|
39
43
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogOptionsDialog.java
|
40
44
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogViewDialog.java
|
@@ -43,5 +47,3 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/uri/SmsUriHandler.java
|
|
43
47
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/TelUriHandler.java
|
44
48
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/UriHandler.java
|
45
49
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/VideoUriHandler.java
|
46
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
|
47
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
|
@@ -27,11 +27,13 @@ end
|
|
27
27
|
ANDROID_API_LEVEL = 3
|
28
28
|
|
29
29
|
ANDROID_PERMISSIONS = {
|
30
|
+
'audio' => ['RECORD_AUDIO', 'MODIFY_AUDIO_SETTINGS'],
|
30
31
|
'camera' => 'CAMERA',
|
31
32
|
'gps' => 'ACCESS_FINE_LOCATION',
|
32
33
|
'network_state' => 'ACCESS_NETWORK_STATE',
|
33
34
|
'phone' => ['CALL_PHONE', 'READ_PHONE_STATE'],
|
34
|
-
'pim' => ['READ_CONTACTS', 'WRITE_CONTACTS'],
|
35
|
+
'pim' => ['READ_CONTACTS', 'WRITE_CONTACTS', 'GET_ACCOUNTS'],
|
36
|
+
'record_audio' => 'RECORD_AUDIO',
|
35
37
|
'vibrate' => 'VIBRATE'
|
36
38
|
}
|
37
39
|
|
@@ -77,7 +79,7 @@ def set_app_name_android(newname)
|
|
77
79
|
end
|
78
80
|
doc.elements.delete "manifest/application/uses-library[@android:name='com.google.android.maps']" unless $use_geomapping
|
79
81
|
|
80
|
-
caps = ['INTERNET']
|
82
|
+
caps = ['INTERNET', 'PERSISTENT_ACTIVITY']
|
81
83
|
$app_config["capabilities"].each do |cap|
|
82
84
|
cap = ANDROID_PERMISSIONS[cap]
|
83
85
|
next if cap.nil?
|
@@ -89,7 +91,7 @@ def set_app_name_android(newname)
|
|
89
91
|
|
90
92
|
manifest = doc.elements["manifest"]
|
91
93
|
manifest.elements.each('uses-permission') { |e| manifest.delete e }
|
92
|
-
caps.each do |cap|
|
94
|
+
caps.sort.each do |cap|
|
93
95
|
element = REXML::Element.new('uses-permission')
|
94
96
|
element.add_attribute('android:name', "android.permission.#{cap}")
|
95
97
|
manifest.add element
|
@@ -125,8 +127,6 @@ namespace "config" do
|
|
125
127
|
|
126
128
|
$emuversion = $app_config["android"]["version"] unless $app_config["android"].nil?
|
127
129
|
$emuversion = $config["android"]["version"] if $emuversion.nil? and !$config["android"].nil?
|
128
|
-
$emuversion = get_market_version(ANDROID_API_LEVEL) if $emuversion.nil?
|
129
|
-
$emuversion = $emuversion.to_s unless $emuversion.nil?
|
130
130
|
|
131
131
|
# Here is switch between release/debug configuration used for
|
132
132
|
# building native libraries
|
@@ -176,6 +176,7 @@ namespace "config" do
|
|
176
176
|
$app_android_r = File.join $tmpdir, "AndroidR.java"
|
177
177
|
$app_rjava_dir = File.join $tmpdir
|
178
178
|
$app_native_libs_java = File.join $tmpdir, "NativeLibraries.java"
|
179
|
+
$app_capabilities_java = File.join $tmpdir, "Capabilities.java"
|
179
180
|
|
180
181
|
if RUBY_PLATFORM =~ /(win|w)32$/
|
181
182
|
$emulator = #"cmd /c " +
|
@@ -206,10 +207,11 @@ namespace "config" do
|
|
206
207
|
end
|
207
208
|
|
208
209
|
puts "+++ Looking for platform..." if USE_TRACES
|
210
|
+
napilevel = ANDROID_API_LEVEL
|
209
211
|
Dir.glob(File.join($androidsdkpath, "platforms", "*")).each do |platform|
|
210
212
|
props = File.join(platform, "source.properties")
|
211
213
|
unless File.file? props
|
212
|
-
puts "+++ WARNING! No source.properties found in #{platform}"
|
214
|
+
puts "+++ WARNING! No source.properties found in #{platform}"
|
213
215
|
next
|
214
216
|
end
|
215
217
|
|
@@ -224,7 +226,11 @@ namespace "config" do
|
|
224
226
|
|
225
227
|
puts "+++ API LEVEL of #{platform}: #{apilevel}" if USE_TRACES
|
226
228
|
|
227
|
-
|
229
|
+
if apilevel > napilevel
|
230
|
+
napilevel = apilevel
|
231
|
+
$androidplatform = File.basename(platform)
|
232
|
+
$found_api_level = apilevel
|
233
|
+
end
|
228
234
|
end
|
229
235
|
|
230
236
|
if $androidplatform.nil?
|
@@ -233,7 +239,7 @@ namespace "config" do
|
|
233
239
|
end
|
234
240
|
|
235
241
|
if $androidplatform.nil?
|
236
|
-
puts "+++ No required platform (API level #{ANDROID_API_LEVEL}) found, can't proceed"
|
242
|
+
puts "+++ No required platform (API level >= #{ANDROID_API_LEVEL}) found, can't proceed"
|
237
243
|
exit 1
|
238
244
|
else
|
239
245
|
puts "+++ Platform found: #{$androidplatform}" if USE_TRACES
|
@@ -282,19 +288,15 @@ namespace "config" do
|
|
282
288
|
end
|
283
289
|
end
|
284
290
|
|
285
|
-
$avdname = "rhoAndroid" + $emuversion.gsub(/[^0-9]/, "")
|
286
|
-
$avdname += "ext" if $use_geomapping
|
287
|
-
$avdtarget = $androidtargets[get_api_level($emuversion)]
|
288
|
-
|
289
291
|
# Detect Google API add-on path
|
290
292
|
if $use_geomapping
|
291
293
|
puts "+++ Looking for Google APIs add-on..." if USE_TRACES
|
294
|
+
napilevel = ANDROID_API_LEVEL
|
292
295
|
Dir.glob(File.join($androidsdkpath, 'add-ons', '*')).each do |dir|
|
293
|
-
break unless $gapijar.nil?
|
294
296
|
|
295
297
|
props = File.join(dir, 'manifest.ini')
|
296
298
|
if !File.file? props
|
297
|
-
puts "+++ WARNING: no manifest.ini found in #{dir}"
|
299
|
+
puts "+++ WARNING: no manifest.ini found in #{dir}"
|
298
300
|
next
|
299
301
|
end
|
300
302
|
|
@@ -309,7 +311,11 @@ namespace "config" do
|
|
309
311
|
|
310
312
|
puts "+++ API LEVEL of #{dir}: #{apilevel}" if USE_TRACES
|
311
313
|
|
312
|
-
|
314
|
+
if apilevel > napilevel
|
315
|
+
napilevel = apilevel
|
316
|
+
$gapijar = File.join(dir, 'libs', 'maps.jar')
|
317
|
+
$found_api_level = apilevel
|
318
|
+
end
|
313
319
|
end
|
314
320
|
if $gapijar.nil?
|
315
321
|
puts "+++ No Google APIs add-on found (which is required because 'mapping' enabled in build.yml)"
|
@@ -319,7 +325,13 @@ namespace "config" do
|
|
319
325
|
end
|
320
326
|
end
|
321
327
|
|
322
|
-
|
328
|
+
$emuversion = get_market_version($found_api_level) if $emuversion.nil?
|
329
|
+
$emuversion = $emuversion.to_s
|
330
|
+
$avdname = "rhoAndroid" + $emuversion.gsub(/[^0-9]/, "")
|
331
|
+
$avdname += "ext" if $use_geomapping
|
332
|
+
$avdtarget = $androidtargets[get_api_level($emuversion)]
|
333
|
+
|
334
|
+
setup_ndk($androidndkpath, ANDROID_API_LEVEL)
|
323
335
|
|
324
336
|
$stlport_includes = File.join $shareddir, "stlport", "stlport"
|
325
337
|
|
@@ -668,7 +680,7 @@ namespace "build" do
|
|
668
680
|
puts "Need to regenerate rhocaps.inc"
|
669
681
|
$stdout.flush
|
670
682
|
File.open(rhocaps_inc, 'w') do |f|
|
671
|
-
ANDROID_PERMISSIONS.keys.each do |k|
|
683
|
+
ANDROID_PERMISSIONS.keys.sort.each do |k|
|
672
684
|
f.puts "RHO_DEFINE_CAP(#{k.upcase})"
|
673
685
|
end
|
674
686
|
end
|
@@ -676,6 +688,16 @@ namespace "build" do
|
|
676
688
|
puts "No need to regenerate rhocaps.inc"
|
677
689
|
$stdout.flush
|
678
690
|
end
|
691
|
+
|
692
|
+
# Generate Capabilities.java
|
693
|
+
File.open($app_capabilities_java, "w") do |f|
|
694
|
+
f.puts "package com.rhomobile.rhodes;"
|
695
|
+
f.puts "public class Capabilities {"
|
696
|
+
ANDROID_PERMISSIONS.keys.sort.each do |k|
|
697
|
+
f.puts " public static boolean #{k.upcase}_ENABLED = true;"
|
698
|
+
end
|
699
|
+
f.puts "}"
|
700
|
+
end
|
679
701
|
end
|
680
702
|
|
681
703
|
task :gen_java_ext => "config:android" do
|
@@ -811,6 +833,7 @@ namespace "build" do
|
|
811
833
|
end
|
812
834
|
lines << $app_android_r
|
813
835
|
lines << $app_native_libs_java
|
836
|
+
lines << $app_capabilities_java
|
814
837
|
if File.exists? File.join($extensionsdir, "ext_build.files")
|
815
838
|
File.open(File.join($extensionsdir, "ext_build.files")) do |f|
|
816
839
|
while line = f.gets
|
data/platform/iphone/Info.plist
CHANGED
@@ -76,10 +76,10 @@ namespace "config" do
|
|
76
76
|
$excludelib = ['**/builtinME.rb','**/ServeME.rb','**/TestServe.rb']
|
77
77
|
$tmpdir = $bindir +"/tmp"
|
78
78
|
|
79
|
-
$homedir =
|
79
|
+
$homedir = ENV['HOME']
|
80
80
|
$simdir = "#{$homedir}/Library/Application Support/iPhone Simulator/"
|
81
81
|
$sim="/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications"
|
82
|
-
$guid=
|
82
|
+
$guid = `uuidgen`.strip
|
83
83
|
$applog = File.join($homedir,$app_config["applog"]) if $app_config["applog"]
|
84
84
|
|
85
85
|
|
@@ -171,7 +171,9 @@ namespace "build" do
|
|
171
171
|
task :rhodes => ["config:iphone", "build:iphone:rhobundle"] do
|
172
172
|
|
173
173
|
set_app_name($app_config["name"]) unless $app_config["name"].nil?
|
174
|
-
|
174
|
+
ipath = $config["build"]["iphonepath"]
|
175
|
+
cp File.join(ipath, 'icon.png'), File.join(ipath, 'icon.png.bak') unless File.exists? File.join(ipath, 'icon.png.bak')
|
176
|
+
cp $app_path + "/icon/icon.png", ipath
|
175
177
|
|
176
178
|
set_signing_identity($signidentity,$provisionprofile,$entitlements.to_s) if $signidentity.to_s != ""
|
177
179
|
|
@@ -179,11 +181,18 @@ namespace "build" do
|
|
179
181
|
args = ['build', '-target', 'rhorunner', '-configuration', $configuration, '-sdk', $sdk]
|
180
182
|
|
181
183
|
puts Jake.run("xcodebuild",args)
|
182
|
-
|
184
|
+
ret = $?
|
185
|
+
|
186
|
+
chdir $startdir
|
187
|
+
set_app_name("Rhodes") unless $app_config["name"].nil?
|
188
|
+
rm_f File.join(ipath, 'icon.png')
|
189
|
+
cp File.join(ipath, 'icon.png.bak'), File.join(ipath, 'icon.png')
|
190
|
+
rm_f File.join(ipath, 'icon.png.bak')
|
191
|
+
|
192
|
+
unless ret == 0
|
183
193
|
puts "Error cleaning"
|
184
194
|
exit 1
|
185
195
|
end
|
186
|
-
chdir $startdir
|
187
196
|
|
188
197
|
end
|
189
198
|
|
@@ -198,50 +207,66 @@ namespace "run" do
|
|
198
207
|
exit 1
|
199
208
|
end
|
200
209
|
`killall "iPhone Simulator"`
|
210
|
+
|
211
|
+
puts "sdk: #{$sdk.inspect.to_s}"
|
212
|
+
sdkver = $sdk.gsub(/^iphonesimulator/, '')
|
201
213
|
|
202
214
|
rhorunner = $config["build"]["iphonepath"] + "/build/#{$configuration}-iphonesimulator/rhorunner.app"
|
215
|
+
puts "rhorunner: #{rhorunner}"
|
203
216
|
|
204
217
|
|
205
|
-
|
206
|
-
|
207
|
-
|
218
|
+
puts "our app name: #{$app_config['name']}"
|
219
|
+
puts "simdir: #{$simdir}"
|
220
|
+
Dir.glob(File.join($simdir, sdkver, "Applications", "*")).each do |simapppath|
|
221
|
+
need_rm = true if File.directory? simapppath
|
222
|
+
if File.exists?(File.join(simapppath, 'rhorunner.app', 'name'))
|
223
|
+
name = File.read(File.join(simapppath, 'rhorunner.app', 'name'))
|
224
|
+
puts "found app name: #{name}"
|
225
|
+
guid = File.basename(simapppath)
|
226
|
+
puts "found guid: #{guid}"
|
227
|
+
if name == $app_config['name']
|
228
|
+
$guid = guid
|
229
|
+
need_rm = false
|
230
|
+
end
|
208
231
|
end
|
232
|
+
rm_rf simapppath if need_rm
|
233
|
+
rm_rf simapppath + ".sb" if need_rm
|
209
234
|
end
|
210
235
|
|
211
|
-
|
212
|
-
simapp = sdk + "/Applications"
|
213
|
-
simlink = sdk + "/Library/Preferences"
|
236
|
+
puts "app guid: #{$guid}"
|
214
237
|
|
215
|
-
|
216
|
-
$simrhodes = simrhodes if $simrhodes.nil?
|
238
|
+
mkdir_p File.join($simdir, sdkver)
|
217
239
|
|
218
|
-
|
219
|
-
|
240
|
+
simapp = File.join($simdir, sdkver, "Applications")
|
241
|
+
simlink = File.join($simdir, sdkver, "Library", "Preferences")
|
220
242
|
|
221
|
-
|
222
|
-
`ln -f -s "#{simlink}/com.apple.PeoplePicker.plist" "#{simrhodes}/Library/Preferences/com.apple.PeoplePicker.plist"`
|
223
|
-
`ln -f -s "#{simlink}/.GlobalPreferences.plist" "#{simrhodes}/Library/Preferences/.GlobalPreferences.plist"`
|
243
|
+
$simrhodes = File.join(simapp, $guid)
|
224
244
|
|
225
|
-
|
226
|
-
|
245
|
+
mkdir_p File.join($simrhodes, "Documents")
|
246
|
+
mkdir_p File.join($simrhodes, "Library", "Preferences")
|
227
247
|
|
248
|
+
rm_rf File.join($simrhodes, 'rhorunner.app')
|
249
|
+
cp_r rhorunner, $simrhodes
|
250
|
+
['com.apple.PeoplePicker.plist', '.GlobalPreferences.plist'].each do |f|
|
251
|
+
`ln -f -s "#{simlink}/#{f}" "#{$simrhodes}/Library/Preferences/#{f}"`
|
252
|
+
end
|
228
253
|
|
229
|
-
|
230
|
-
|
254
|
+
`echo "#{$applog}" > "#{$simrhodes}/Documents/rhologpath.txt"`
|
255
|
+
rholog = simapp + "/" + $guid + "/Documents/RhoLog.txt"
|
231
256
|
|
232
|
-
apprholog = $app_path + "/rholog-#{File.basename(sdk)}.txt"
|
233
|
-
rm_f apprholog
|
234
|
-
rm_f apppublic
|
235
|
-
`ln -f -s "#{simpublic}" "#{apppublic}"`
|
236
|
-
`ln -f -s "#{rholog}" "#{apprholog}"`
|
237
|
-
`echo > "#{rholog}"`
|
238
|
-
f = File.new("#{simapp}/#{$guid}.sb","w")
|
239
|
-
f << "(version 1)\n(debug deny)\n(allow default)\n"
|
240
|
-
f.close
|
241
257
|
|
258
|
+
simpublic = simapp + "/" + $guid + "/Documents/apps/public"
|
259
|
+
apppublic = $app_path + "/sim-public-#{sdkver}"
|
242
260
|
|
243
|
-
|
244
|
-
|
261
|
+
apprholog = $app_path + "/rholog-#{sdkver}.txt"
|
262
|
+
rm_f apprholog
|
263
|
+
rm_f apppublic
|
264
|
+
`ln -f -s "#{simpublic}" "#{apppublic}"`
|
265
|
+
`ln -f -s "#{rholog}" "#{apprholog}"`
|
266
|
+
`echo > "#{rholog}"`
|
267
|
+
f = File.new("#{simapp}/#{$guid}.sb","w")
|
268
|
+
f << "(version 1)\n(debug deny)\n(allow default)\n"
|
269
|
+
f.close
|
245
270
|
|
246
271
|
end
|
247
272
|
|
@@ -739,7 +739,7 @@
|
|
739
739
|
);
|
740
740
|
runOnlyForDeploymentPostprocessing = 0;
|
741
741
|
shellPath = /bin/sh;
|
742
|
-
shellScript = "RHO_SOURCE_DIR=${TARGET_BUILD_DIR}/../../bin/RhoBundle\nRHO_TARGET_DIR=${TARGET_BUILD_DIR}/${TARGET_NAME}.app\nmkdir -p ${RHO_TARGET_DIR}\ncp -Rf ${RHO_SOURCE_DIR}/* ${RHO_TARGET_DIR}";
|
742
|
+
shellScript = "RHO_SOURCE_DIR=${TARGET_BUILD_DIR}/../../bin/RhoBundle\nRHO_TARGET_DIR=${TARGET_BUILD_DIR}/${TARGET_NAME}.app\necho \"Create dir $RHO_TARGET_DIR\"\nmkdir -p ${RHO_TARGET_DIR}\nfor i in `ls -1 ${RHO_SOURCE_DIR}`\ndo\n echo \"rm -Rf $RHO_TARGET_DIR/$i\"\n rm -Rf ${RHO_TARGET_DIR}/$i\ndone\necho \"cp -Rf $RHO_SOURCE_DIR/* $RHO_TARGET_DIR\"\ncp -Rf ${RHO_SOURCE_DIR}/* ${RHO_TARGET_DIR}";
|
743
743
|
};
|
744
744
|
/* End PBXShellScriptBuildPhase section */
|
745
745
|
|
@@ -8,12 +8,19 @@
|
|
8
8
|
#include <windows.h>
|
9
9
|
#include <time.h>
|
10
10
|
|
11
|
+
typedef int socklen_t;
|
12
|
+
|
11
13
|
#if defined(OS_WINCE)
|
12
14
|
#include "ruby/wince/sys/types.h"
|
13
15
|
#include "ruby/wince/sys/stat.h"
|
14
|
-
#
|
16
|
+
#ifdef __cplusplus
|
17
|
+
extern "C"
|
18
|
+
#endif //__cplusplus
|
19
|
+
char *strdup(const char * str);
|
20
|
+
|
21
|
+
#else //!defined(OS_WINCE)
|
15
22
|
#include <sys/stat.h>
|
16
|
-
#endif
|
23
|
+
#endif //!defined(OS_WINCE)
|
17
24
|
|
18
25
|
#define LOG_NEWLINE "\r\n"
|
19
26
|
#define LOG_NEWLINELEN 2
|
@@ -25,7 +32,15 @@ typedef unsigned __int64 uint64;
|
|
25
32
|
|
26
33
|
#define strcasecmp _stricmp
|
27
34
|
#define snprintf _snprintf
|
28
|
-
|
35
|
+
|
36
|
+
#define FMTI64 "%I64d"
|
37
|
+
#define FMTU64 "%I64u"
|
38
|
+
|
39
|
+
#else // !(defined( OS_WINDOWS ) || defined( OS_WINCE ))
|
40
|
+
|
41
|
+
#define FMTI64 "%lli"
|
42
|
+
#define FMTU64 "%llu"
|
43
|
+
|
29
44
|
# if defined(OS_ANDROID)
|
30
45
|
// Needed for va_list on Android
|
31
46
|
# include <stdarg.h>
|
@@ -325,74 +325,96 @@ void CRhodesApp::initHttpServer()
|
|
325
325
|
|
326
326
|
const char* CRhodesApp::getFreeListeningPort()
|
327
327
|
{
|
328
|
+
int sockfd = -1;
|
329
|
+
struct sockaddr_in serv_addr = {0};
|
330
|
+
int noerrors = 1;
|
331
|
+
|
328
332
|
if ( m_strListeningPorts.length() > 0 )
|
329
333
|
return m_strListeningPorts.c_str();
|
330
334
|
|
331
|
-
int noerrors = 1;
|
332
335
|
LOG(INFO) + "Trying to get free listening port.";
|
333
336
|
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
337
|
+
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
338
|
+
if ( sockfd < 0 )
|
339
|
+
{
|
340
|
+
LOG(WARNING) + "Unable to open socket";
|
341
|
+
noerrors = 0;
|
342
|
+
}
|
343
|
+
|
344
|
+
int disable = 0;
|
345
|
+
if (noerrors && setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&disable, sizeof(disable)) != 0)
|
346
|
+
{
|
347
|
+
LOG(WARNING) + "Unable to set socket option";
|
348
|
+
noerrors = 0;
|
349
|
+
}
|
350
|
+
#if defined(OS_MACOSX)
|
351
|
+
if (noerrors && setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (const char *)&disable, sizeof(disable)) != 0)
|
352
|
+
{
|
353
|
+
LOG(WARNING) + "Unable to set socket option";
|
354
|
+
noerrors = 0;
|
355
|
+
}
|
356
|
+
#endif
|
357
|
+
|
358
|
+
if (noerrors)
|
359
|
+
{
|
360
|
+
memset((void *) &serv_addr, 0, sizeof(serv_addr));
|
361
|
+
#if defined(OS_MACOSX)
|
362
|
+
serv_addr.sin_len = sizeof(serv_addr);
|
363
|
+
#endif
|
364
|
+
serv_addr.sin_family = AF_INET;
|
365
|
+
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
366
|
+
serv_addr.sin_port = htons(8080);
|
367
|
+
|
368
|
+
LOG(INFO) + "Trying to bind on 8080 port...";
|
357
369
|
|
358
|
-
|
370
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
|
371
|
+
{
|
372
|
+
// Fill serv_addr again but with dynamically selected port
|
373
|
+
#if defined(OS_MACOSX)
|
374
|
+
serv_addr.sin_len = sizeof(serv_addr);
|
375
|
+
#endif
|
376
|
+
serv_addr.sin_family = AF_INET;
|
377
|
+
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
378
|
+
serv_addr.sin_port = htons(0);
|
379
|
+
|
380
|
+
LOG(INFO) + "Trying to bind on dynamic port...";
|
381
|
+
|
382
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
|
359
383
|
{
|
360
|
-
|
361
|
-
|
362
|
-
{
|
363
|
-
LOG(WARNING) + "Unable to bind";
|
364
|
-
noerrors = 0;
|
365
|
-
}
|
384
|
+
LOG(WARNING) + "Unable to bind";
|
385
|
+
noerrors = 0;
|
366
386
|
}
|
387
|
+
}
|
388
|
+
}
|
367
389
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
390
|
+
if ( noerrors )
|
391
|
+
{
|
392
|
+
char buf[10] = {0};
|
393
|
+
|
394
|
+
socklen_t length = sizeof( serv_addr );
|
395
|
+
|
396
|
+
if (getsockname( sockfd, (struct sockaddr *)&serv_addr, &length ) != 0)
|
397
|
+
{
|
398
|
+
LOG(WARNING) + "Can not get socket info";
|
399
|
+
noerrors = 0;
|
400
|
+
}
|
401
|
+
else
|
402
|
+
{
|
403
|
+
sprintf(buf, "%d", (int)ntohs(serv_addr.sin_port));
|
404
|
+
LOG(INFO) + "Got port to bind on: " + buf;
|
405
|
+
m_strListeningPorts = buf;
|
406
|
+
}
|
407
|
+
}
|
408
|
+
|
409
|
+
//Clean up
|
385
410
|
#if defined(OS_ANDROID)
|
386
|
-
|
411
|
+
close(sockfd);
|
387
412
|
#else
|
388
|
-
|
413
|
+
closesocket(sockfd);
|
389
414
|
#endif
|
390
|
-
}
|
391
|
-
|
392
|
-
}
|
393
415
|
|
394
416
|
if ( !noerrors )
|
395
|
-
m_strListeningPorts = "
|
417
|
+
m_strListeningPorts = "0";
|
396
418
|
|
397
419
|
LOG(INFO) + "Free listening port: " + m_strListeningPorts;
|
398
420
|
|