-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRelease Notes.txt
More file actions
4687 lines (4060 loc) · 238 KB
/
Copy pathRelease Notes.txt
File metadata and controls
4687 lines (4060 loc) · 238 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
= RubyMotion 9.10 (Dec 2025) =
* [Xcode] Added support for Xcode 16.2.
= RubyMotion 9.9 =
* [Xcode] Fixed issue with launching simulator in Xcode 16.1.
= RubyMotion 9.8 =
* [Xcode] Added support for Xcode 16.1.
= RubyMotion 9.7 =
* [Xcode] Added support for Xcode 16.0 GM.
= RubyMotion 9.6 (Sep 2024) =
* [Xcode] Added support for Xcode 16.0 RC.
* [Xcode] Added support for Xcode 16.1 Beta.
* [Android] Dropped support for SDK version less than 26.
* [Android] NDK target updated to v26.3.11579264 and SDK Target 34.
IMPORTANT:
For updated Android toolchains, run:
```sh
motion repo
motion android-setup
```
In your Rakefile, you'll need to update the following.
```ruby
# recommended minimum target to have largest compatability
app.api_version = '26'
# required api target for distribution on GooglePlay
app.target_api_version = '34'
```
= RubyMotion 9.5 =
* [Xcode] Added support for Xcode 16.0 Beta.
= RubyMotion 9.4 (May 2024) =
* [Xcode] Added support for Xcode 15.3.
= RubyMotion 9.3 =
* [Xcode] Added support for Xcode 15.3.
= RubyMotion 9.2 =
* [Xcode] Added support for Xcode 15.0.1, 15.1, 15.2.
= RubyMotion 9.1 =
* [Xcode] Added support for Xcode 15.0 and 15.1 beta.
IMPORTANT:
There is a known issue in Xcode 15.0 and 15.1 with the linker. Run `motion repo` to
get latest updates to compilation machinery.
If you were having issues with BridgeSupport functions not being precompiled, recompile
these apps with Xcode 15+ and the issue should be resolved.
See the following link for more info:
https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
IMPORTANT:
Apple has completely changed the Xcode 15.0 simulator and device connectivity
infrastructure (including Sonoma). We have a dependency on libimobiledevice and the
contributors are working on implementating this new communcation protocol.
We are tracking updates to this GH Issue here (and attempting to contribute updates where we can): https://github.com/libimobiledevice/libimobiledevice/issues/1490
What this means:
- Apps can be installed onto the device using Xcode 15, but the repl will fail to boot (on both the device and simulator).
- Apps targeting iOS 17.0 and MacOS 14.0 can be distributed to production, dev builds to device will install to device, but repl will not connect.
- Repl will connect on the Simulator using Xcode 14.3.1, but standard-in will not be accepted on Sonoma (though console out will be shown).
= RubyMotion 9.0 (Sep 2023) =
* [iOS] Apps that leverage the MessagesUI framework have a collision with the Complex
numeric type in RubyMotion. This type has been removed so as not to clash with
iOS 17. If you're app uses MessagesUI, release a production build to avoid crashes
when iOS 17 release.
* [iOS] iOS SDK Versions less than 12.4 have been removed (less than 1% of device use
versions under 12.4).
* [Pending] Fixes for the interaction with Xcode 15.0's repl and developer devices is still
in the works. Please use Xcode 14.3.1 for now.
= RubyMotion 8.18 =
* [Xcode] Added support for Xcode 15 beta 5.
* [BridgeSupport] Updated BridgeSupport binary to be universal.
= RubyMotion 8.17 =
* [MacOS] Re-enabled Universal Binaries.
= RubyMotion 8.16 =
* [Repl] Arm64 support added to repl.
* [Repl] Fixed issues with detecting deviced connected via USB.
= RubyMotion 8.15 =
* [BridgeSupport] Arm64 support added to BridgeSupport.
* [Repl] Dependency on libimobiledevice upgraded to latest version.
= RubyMotion 8.14 =
* [Repl] Repl dependencies no longer rely on what's installed via brew.
= RubyMotion 8.13 =
* [Xcode] Added support for Xcode 14.3.1
* [Starter] Bug fix for Starter License default SDK
= RubyMotion 8.12 =
* [Xcode] Added support for Xcode 14.3.
* [MacOS] Added support for MacOS 13.3.
* [iOS] Added support for iOS 16.4.
= RubyMotion 8.9 =
* [Xcode] Added support for Xcode 14.2.
* [MacOS] Added support for MacOS 13.1.
* [iOS] Added support for iOS 16.2.
= RubyMotion 8.8 =
* [MacOS] Added support for MacOS 13.0.
* [Android] Added support for Android APIs 31 through 33.
IMPORTANT:
For the new Android toolchains, you will need to run `motion repo`
and `motion android-setup`.
IMPORTANT:
The adoption percentages for API 33 are likely to be low, when
releasing to the play store be sure to set your `app.api_version=`
to an API version that has wider adoption (the recommended value
is `app.api_version = '26'`).
= RubyMotion 8.7 =
* [Xcode] Added support for Xcode 14.1 Beta 3 and iOS 16.1.
= RubyMotion 8.6 =
* [Xcode] Added support for Xcode 14.0.
= RubyMotion 8.5 =
* [Xcode] Added support for Xcode 14.0 Release Candiate.
= RubyMotion 8.4 (May 2022) =
* [Xcode] Added support for Xcode 13.4.
= RubyMotion 8.3 (Apr 2022) =
* [MacOS] Added support for MacOS 12.3.
* [MacOS] Added support for Universal Binaries.
IMPORTANT:
With the addition of universal binaries, the built-in MacOS template
has been deprecated and a new template has been extracted to the public repo.
Be sure to run `motion repo` so that latest templates are pulled down.
- If you only want to compile for x86 you can add the following line to
your Rakefile with:
```
app.archs["MacOSX"] = ["x86_64"]
```
- If you have an existing MacOS app, after running `motion repo`, you
can incorporate the new template into your existing Rakefile
by changing the top few lines:
```ruby
# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
$:.unshift("~/.rubymotion/rubymotion-templates") # this line is new line
require 'motion/project/template/osx'
```
= RubyMotion 8.2 =
* [Xcode] Added support for Xcode 13.3.
* [Android] Legacy SDKs available to compile against.
You must still compile against api 30, but can provided a lower api version
for backwards compatibility.
To install legacy android sdks run `motion android-setup-legacy`.
Here is an example of what you're Rakefile would look like:
Motion::Project::App.setup do |app|
app.api_version = '21' # minSdkTarget
app.target_api_version = '30' # compilation target
end
* [MacOS] RubyMotion kernel has been created for both x86 and arm64: kernel-arm64.bc, kernel-x86_64.bc (updates to MacOS rake tasks pending).
= RubyMotion 8.1 =
* [Xcode] Added support for Xcode 13.2.1.
* [Bugfix] Repl for iOS simulator fixed.
= RubyMotion 8.0 (Dec 2021) =
* [LLVM] RubyMotion compiler upgraded to LLVM Version 10.0. This is a big upgrade to the
compiler. Please let us know if you hit any issues.
* [Android] Added support for Android API 30. As of November 2021 Google has deprecated all SDK
versions below SDK 30. Run `motion android-setup` to install the new toolchain.
* [Android] Project templates for Android API 30 updated. Run `motion repo` to get new templates.
* [Xcode] Added support for Xcode 13.1.
* [Known Issues] [Android] Automated construction of Android Application Bundle is pending. See
https://developer.android.com/studio/build/building-cmdline#build_bundle for help in manually creating
an app bundle.
= RubyMotion 7.22 (Oct 2021) =
* [Xcode] Added support for Xcode 13.0.
* [Known Issues] Repl + Device running iOS 15.0 works for valid ruby commands (we are still working
through crashes related to invalid Ruby/exceptions). Repl issues still exist for running with the
simulator, but the incremental fix for device centric repl is worth releasing.
= RubyMotion 7.21 =
* [Xcode Beta] Added support for Xcode 13.0 Beta 5 (this is for Indie and Pro Licenses Only).
= RubyMotion 7.20 =
* [Xcode] Backtrace now also considers the case when `DW_AT_ranges`
is present instead of DW_AT_hipc. For more information about the
DWARF Standard, see: http://dwarfstd.org/
= RubyMotion 7.19 =
* [Xcode] Fixed backtrace issue related to Xcode 12.0+. Issue is related to
Xcode 12.0 adding debug information partitioned by DWARF compilation units that
overlap the same address space. These overlapping address spaces are now taken
into consideration for determining the correct location of an exception.
= RubyMotion 7.18 (Apr 2021) =
* [Xcode] Added support for Xcode 12.5.
= RubyMotion 7.17 =
* [Bugfix] [OSX] Fixes added for deployment target 11.+.
* [OSS] Be sure to run `motion repo` for fixes related to `OBJC_DISABLE_INITIALIZE_FORK_SAFETY`.
* [Bugfix] Fixes added for `rake debug=1`.
= RubyMotion 7.16 (Feb 2021) =
* [Important] [Bugfix] Bugfix for generating 64-bit BridgeSupport files on Big Sur.
* [Bugfix] MacOS 10.14 SDK target fixed.
* [Xcode] Added support for Xcode 12.4.
= RubyMotion 7.15 (Jan 2021) =
* [Big Sur] Supported added for MacOS 11.0.
* [Xcode] Added support for Xcode 12.3.
* [rubymotion-template] Added updates so that Swift Runtime libraries are no longer required to run the repl.
* [Important] [Prerequisites] Please be sure to do the following after updating to 7.15:
1. Install Xcode 12.3 if you are able. Be sure to launch Xcode at least once and accept any EULAs
and install "Additional Components".
2. Be sure Xcode Commandline Tools are installed and set to the default location:
```
sudo xcode-select --install
sudo xcode-select --reset
```
3. Update the RubyMotion community templates:
```
motion repo
```
4. Be sure you are running the latest version of the `cocoapods` gem:
```
gem install cocoapods # if needed
bundle update cocoapods
pod repo update
```
5. Be sure to do a full clean of your project:
```
rake clean:all
rake pod:install # if you leverage cocoapods
rake default
```
6. Come to the [RubyMotion Slack Channel](http://slack.rubymotion.com) if you hit any snags. Happy new years everyone!
= RubyMotion 7.14 (Dec 2020) =
* Compiler updates in preparation for Apple Silicon and Big Sur.
* [Xcode] Added Support for Xcode 12.2.
* [Xcode] Added Support for Xcode 12.1.1.
* [Xcode Beta] Added Support for Xcode 12.3 Beta 3.
= RubyMotion 7.13 =
* [Xcode] Added support for Xcode 12.1.1 Release Candidate.
* [Xcode] Added support for Xcode 12.2 Release Candiate.
= RubyMotion 7.12 =
* [Xcode] Added support for Xcode 12.1 GM (Which includes simulators for new devices).
* [Xcode] Added support for Xcode 12.2 Beta 3.
= RubyMotion 7.11 (Sep 2020) =
* [Xcode] Added support for Xcode 12.2 Beta.
= RubyMotion 7.10 =
* [Xcode] Added support for Xcode 12.0 GM.
* [BridgeSupport] BridgeSupport files for MacOS 11.0 generated based off of Xcode 12.0 GM.
= RubyMotion 7.9 =
* [Bugfix] Fixed BridgeSupport files for Xcode 11.7. You can see the new metadata in
/Library/RubyMotion/data/.
= RubyMotion 7.8 =
* [Xcode Beta] Added support for Xcode 12.0 (Beta 6) running on macOS Catalina. This is only
for Indie and Pro subscriptions.
* [Xcode] Added support for Xcode 11.7.
* [Bugfix] OSX `Support/Error.h` compilation exceptions resolved when not providing a deployment_target.
* NOTE: Change log for 7.6 updated with more information about using `Pointer`.
= RubyMotion 7.7 =
* [Xcode Beta] Added support for Xcode 12.0 (Beta 5) running on macOS Catalina. This is only
for Indie and Pro subscriptions.
* NOTE: Change log for 7.6 updated with more information about using `Pointer`.
= RubyMotion 7.6 =
* [Xcode] Added support for Xcode 11.6.
* [Bugfix] `Pointer.new` top level retain behavior has been reverted. If you were having crashes
in RM 7.5, this should resolve that issue. The retain logic for Pointer has instead
been scoped down to the access of the value. If you want the Pointer to auto release, instead of:
```
@pointer = Pointer.new(:object)
someObjectiveCFunction(@pointer)
.... later in code ....
puts @pointer.value
```
You will need to do:
```
pointer = Pointer.new(:object)
someObjectiveCFunction(pointer)
@pointer_value = pointer.value_with_autorelease
.... later in code ....
puts @pointer_value
```
If the value within the Pointer is an array. Instead of:
```
@pointer = Pointer.new(:object)
someObjectiveCFunction(@pointer)
.... later in code ....
puts @pointer[0] # alias is @pointer.value_at(0)
puts @pointer[1] # alias is @pointer.value_at(1)
```
You will need to do
```
If the value within the Pointer is an array. Instead of:
```
pointer = Pointer.new(:object)
someObjectiveCFunction(@pointer)
@pointer_item_1 = pointer.value_at_with_autorelease(0)
@pointer_item_2 = pointer.value_at_with_autorelease(1)
.... later in code ....
puts @pointer_item_1
puts @pointer_item_2
```
Here is a complete example of the two ways you can write this:
```
# Pointer is ivar/retained and pointer's content is accessed via `.value`
class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
rootViewController = UIViewController.alloc.init
rootViewController.title = 'pointersinrubymotion'
rootViewController.view.backgroundColor = UIColor.whiteColor
navigationController = UINavigationController.alloc.initWithRootViewController(rootViewController)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
@window.rootViewController = navigationController
@window.makeKeyAndVisible
@error_ptr = Pointer.new(:object)
data = NSData.alloc.init
unless data.writeToFile("~/file-does-not-exist", options: 0, error: @error_ptr)
error = @error_ptr.value
puts "#{error.localizedDescription}"
end
true
end
end
```
```
# Pointer is not an ivar and pointer's content is accessed via `.value_with_autorelease` (and is an ivar)
class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
rootViewController = UIViewController.alloc.init
rootViewController.title = 'pointersinrubymotion'
rootViewController.view.backgroundColor = UIColor.whiteColor
navigationController = UINavigationController.alloc.initWithRootViewController(rootViewController)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
@window.rootViewController = navigationController
@window.makeKeyAndVisible
error_ptr = Pointer.new(:object)
data = NSData.alloc.init
unless data.writeToFile("~/file-does-not-exist", options: 0, error: error_ptr)
@error = error_ptr.value_with_autorelease
puts "#{@error.localizedDescription}"
end
true
end
end
```
* [Xcode Beta] Added support for Xcode 12.0 running on macOS Catalina. This is only
for Indie and Pro subscriptions. Big Sur plus Apple Silicon support will be released
at a future date. Come to the Slack channel for updates: http://slack.rubymotion.com.
= RubyMotion 7.5 =
* [Bugfix] `Pointer.new` was leaking a small amount of memory with every instance
creation and is noticeable after a few thousand constructions. This has been resolved.
With this change, you cannot hold onto a `Pointer` type within an iVar. Instead of
```
@pointer = Pointer.new(:object)
someObjectiveCFunction(@pointer)
.... later in code ....
puts @pointer.value # will now throw an exception
```
You will need to do
```
pointer = Pointer.new(:obeject)
someObjectiveCFunction(pointer)
@pointer_value = pointer.value # only hold onto the value from the pointer
.... later in code ....
puts @pointer_value # will now throw an exception
```
The minimum reproduction of this memory leak was provided by Ben Govero:
https://github.com/ben5516/objc-pointer-crash
* [Xcode] Added support for Xcode 11.5.
= RubyMotion 7.4 =
* [Bugfix] Added missing BridgeSupport metadata files for iOS 11.4.
= RubyMotion 7.3 =
* [Xcode] Added Support for Xcode 11.4.
* [Known Isssues] We are working on creating a cross platform repl. As
a work around for NSLog, open Xcode->Windows->Device And Simuators. From
there, you can open the console for your device and see NSLog statements.
* [News] New DragonRuby website should launch by the end of April.
= RubyMotion 7.2 =
* [Xcode] Added Support for Xcode 11.3.1.
= RubyMotion 7.1 =
* [MacOSX] [Bugfix] Fix BridgeSupport files associated with MacOSX 10.13.
* [Known Issues] Repl does not relay NSLog statements. This is currently
being worked on and a fix will release soon.
* [command] Forced `motion doctor` verification now respects the RM_BYPASS_DOCTOR
environment variable.
* [command] Having multiple SDKs in your SDK directory is now treated as a warning
as opposed to a `motion doctor` exception/error.
* [Catalina] If you want to give ZSH a try, consider using OhMyZsh. It was
straightforward to install and the theme options that are provided out of the box have
really nice PS1 formatting/git status information.
= RubyMotion 7.0 (Dec 2019) =
* [MacOSX] Added Support for MacOS Catalina.
* [Bugfix] Repl has been fixed and can now connect to iOS 13 devices.
We are still working on a fix for repl interaction with devices that
cannot install iOS 13 (any device released before the iPhone 6S). To use
the repl you must use an iPhone 6S or higher. Older devices will
still be able to install a developer build, however the repl will fail to run.
* [SemVer] 32 bit support has been dropped (Catalina no longer supports
32-bit applications).
* [command] Motion `doctor` has been improved.
* [Known Issues] Catalina requires OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
to use the RubyMotion compiler. We are updating the compiler's thread usage
to get rid of this environment variable. For now you will need to add the
following line to your ~/.profile:
```
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
```
* [Catalina] Upgrading your local machine to catalina should be relatively painless.
Here are the steps Amir always follows when doing an OS upgrade:
1. Install the latest Xcode (in this case install Xcode 11.2.1).
You should *not* install Xcode from the AppStore, and instead
download it from http://developer.apple.com/downloads. This
ensures that Xcode isn't automatically updated without your
knowledge. Be sure to open Xcode and accept the EULA.
2. Re-install Command Line Tools:
```
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
sudo xcode-select --reset
```
3. Take note of all brew packages installed, and then *completely*
uninstall *all* of them. Then reinstall. This ensures that all
your packages are compiled against the latest toolchain and OS.
While this may seem excessive, it guarantees system consistency.
4. Remove any cached RubyMotion builds using
`rm -rf ~/Library/RubyMotion/build`
and be sure to run
`rake clean:all`
in your RubyMotion projects directories.
5. Catalina's default shell is zsh which may not be 100% compatible
with what you have in your .bash_profile and .bashrc. Here's some
guidance to help you transition to zsh. If you do not want to
upgrade your shell. You can skip these recommendations if you
do not want to use the new shell.
1. Move all environment variables to ~/.profile and remove
them from ~/.bashrc and ~/.bash_profile.
2. Keep existing aliases in ~/.bashrc.
3. Remove any PS1 customizations you have as they probably won't
work in zsh.
4. Create a ~/.zshrc file and bootstrap it with ~/.profile and
~/.bashrc:
```
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.bashrc'
```
5. Update ~/.bashrc and ~/.bash_profile to also source
~/.profile, here is a sample:
```
source ~/.profile # <-- add this line
# Rest of your bash profile customizations
# (just an example)
alias sleepc="osascript -e 'tell application \"Finder\" to sleep'"
alias vim="emacs"
```
6. For case insensitive file completion, add these lines to
your .zshrc:
```
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.bashrc'
autoload -Uz compinit
precmd() { compinit }
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
```
7. For light weight git integration and a customized PS1:
```
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.bashrc'
autoload -Uz vcs_info
autoload -Uz compinit
precmd() { vcs_info && compinit }
zStyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:git*' formats "(%b)"
NEWLINE=$'\n'
PROMPT="┌── [ %~ ${vcs_info_msg_0_}]${NEWLINE}+-> "
```
= RubyMotion 6.5 =
* [Xcode] Added support for Xcode 11.2.
* [Known Issues] The repl attachment against iOS 13 devices is currently not working. A fix is
in the works for this. The repl should still attach to the Simulator.
UPDATE: We've isolated the issue with regards to the REPL on devices. The changelog will have all the details
with regards to what happened and how it was fixed (for those that are interested in the details).
* [Important] [News] RubyMotion's ownership expansion has been completed. Amir remains as CEO.
Aaron continues to operate as CIO. Ryan's title has been changed/better-aligned
to CGO (Chief Gaming Officer). And most recently, please welcome Alex Denisov, an LLVM specialist
and our new CTO. A longer news entry will be released after Catalina versions of RM have been finalized.
* [Important] [News] Things have finally stabilized from Apple's side I feel, so expect to
upgrade to Catalina within the next few weeks (but not yet). There will be a RubyMotion 6.x release before
Catalina. And then "immediately" afterwards, a RubyMotion 7.0 release which WILL work with Mojave.
RM 7.0 will drop all support for 32 bit including dropping support for MacOS Maverick (10.9).
= RubyMotion 6.4 =
* [Xcode] Added support for Xcode 11.1.
* [Bugfix] Cycle detection was resulting in unrooted/prematurely GC'ed Ruby objects.
* [Known Issues] The repl attachment against iOS 13 devices is currently not working. A fix is in the works for this.
The repl should still attach to the Simulator.
= RubyMotion 6.3 (Sep 2019) =
* [Android] Updated NDK to r15c allowing us to use LLVM 5.0. Run `motion android-setup` to install the new NDK.
* [Android] The default Android target has been upgraded to API 28 for both Pro, Indie and Starter License.
* [Xcode] Added support for Xcode 11.0 and Xcode 11.1 GM.
* [Known Issues] The repl attachment against iOS 13 devices is currently not working. A fix is in the works for this.
The repl should still attach to the Simulator.
= RubyMotion 6.2 (Jul 2019) =
* [Xcode] Support for Xcode 10.3 added.
* [iOS, tvOS, WatchOS] Retroactively added deprecated 64 bit SDKs given requests from the community
to bring back the ability to compile legacy apps.
* [Android] Internal updates to support Android API 28 LLVM compilation. Targeting API 28 is expected to
be in the next release.
* [Beta, WatchOS] Internal updates to support Catalina, the new Apple Watch chipsets, and iOS 13.x.
Expect Xcode 11.0 Beta support to be added to the next release.
* [LLVM] RubyMotion now targets LLVM 5.0 and we are currently testing LLVM 6.2.
* [command] `motion doctor` has been added to help troubleshoot environment problems. The shims
have been staged in RubyMotion, with the heavy lifting done in `doctor.rb` located
on github/amirrajan/rubymotion-templates. Feel free to contribute.
* [News] RubyMotion's Community Channel is close to breaking 1,000 members (it has nearly doubled) :-)
= RubyMotion 6.1 =
* [Android] LLVM Compiler regressions for Android have been patched to fix compilation
issues up to API version 27. NDK Version r19c, LLVM 5.0, and Android 28 support is coming.
* [Android] The default Android target has been upgraded to API 27 for both Pro, Indie and Starter License.
* [Android] If you are on the Pro/Indie License and have an *existing* Android app deployed to Google Play,
it's strongly recommended that you target API 23 to get the largest Android install base.
* [Android] If you are on the Pro/Indie License and are working on a *new* Android app,
it's strongly recommended that you target API 26.
= RubyMotion 6.0 (Apr 2019) =
* This is a major release of RubyMotion. Please read the change log carefully.
Come to the Slack channel if you need any help: http://slack.rubymotion.com.
* [Important] [News] Amir Rajan, owner of RubyMotion has brought on two partners to help in the
continued expansion of the platform (this is good news). Read more about it at:
http://www.rubymotion.com/news/2019/03/01/the-sleeping-dragon-has-awoken.html
* [Important] [News] Lori Olson has started up a fantastic news letter for RubyMotion devs, subscribe here:
https://rubymotionweekly.com/ and be sure to also visit http://schools.rubymotion.com.
* [Important] [SemVer] Given then Xcode 10.2 requires Mojave, this RubyMotion release (by extension) also requires MacOS
Mojave. Here is a guide to help you navigate the options you have available to you.
=======================================================================
Recommended - Upgrade to Mojave 10.14.4, Xcode 10.2, and RubyMotion 6.0
=======================================================================
Amir Rajan (Steward of RubyMotion and App Developer) has been on Mojave since October of 2018
and everything is been running smoothly. As stated in the previous RM release, here are the
things you need to keep in mind when upgrading to Mojave:
1. The upgrade to Mojave takes about an hour.
2. Be sure to reinstall Xcode 10.2 from developer.apple.com/downloads.
*DO NOT INSTALL XCODE FROM THE APP STORE (WHICH AUTO UPDATES).*.
3. Be sure to open Xcode 10.2 and log into your developer account under Xcode -> Preferences -> Account.
4. After Xcode 10.2 has been fully initialized, open terminal and run:
`sudo xcode-select --install && sudo xcode-select --reset`.
5. On Mojave, MacOS SDK header files do not come preinstalled. You'll need to run the following command to install them:
`sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /`
6. After installing Xcode 10.2, the command line tools, and the header files, it is *strongly recommended*
that you fully uninstall homebrew and reinstall a clean copy. Go to https://docs.brew.sh/FAQ
for installation instructions.
You can take note of all the brew packages you have installed using the following command:
`brew list`
To uninstall brew:
`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"`
To reinstall brew:
`/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
After reinstalling brew, you'll want to reinstall your packages. RubyMotion recommends that you install
the following packages (so consider doing so):
```
brew install gcc
brew install cmake
brew install libxml2
brew install sqlite
brew install rbenv
```
And at least following _minium_ Ruby version:
```
rbenv install 2.3.7
```
======================================================================
Not Recommended - If you don't want to upgrade to Mojave 10.14.4.
======================================================================
To reiterate, it's strongly recommended that you upgrade to Mojave 10.14.4. Xcode
10.2 will *not* run on MacOS's below Mojave and requires a seperate download of the
Swift 5 runtime for Mojave versions below 10.14.4.
But if you are unable to, and want to stay on a MacOS version below 10.14.4, follow
the following steps to downgrade RubyMotion 6.0.
1. Delete Xcode from /Applications.
2. Install the archived version of Xcode 10.1 from http://developer.apple.com/downloads/more.
3. Open Xcode 10.1 and log into your developer account under Xcode -> Preferences -> Account.
4. After Xcode 10.1 has been fully initialized, open terminal and run:
`sudo xcode-select --install && sudo xcode-select --reset`.
5. Download the archived version of RubyMotion 5.17: `sudo motion update --cache-version=5.17`
Open the Rakefile of the apps you want to keep developing, change the top line from:
$:.unshift("/Library/RubyMotion/lib")
To:
$:.unshift("/Library/RubyMotion5.17/lib")
6. After changing the Rakefile. Perform a full clean, followed by a rebuild: `rake clean:all default`.
7. If you run into any issues. Come to the Slack Channel: http://slack.rubymotion.com.
= RubyMotion 5.17 (Feb 2019) =
* [Important] [SemVer] Xcode 10.2 *requires* Mojave. This is the final release of RubyMotion that will support Sierra, and High Sierra.
If you want to continue using Sierra/High Sierra. Do not upgrade your Mac OS, Xcode (10.1), or RubyMotion (5.17) past this point.
This is not recommended as Apple is effectively deprecating Xcode support for all OS'es under 10.14.
It is strongly recommended that you upgrade to Mojave at this time. The next version of RubyMotion will be 6.0 which will work with
Xcode 10.1, Xcode 10.2 Beta 3, and Mojave.
Upgrade tips:
- The upgrade to Mojave takes about an hour.
- Be sure to reinstall Xcode 10.1 from developer.apple.com/downloads. *DO NOT INSTALL XCODE FROM THE APP STORE (WHICH AUTO UPDATES).*.
- Be sure to open Xcode 10.1 at least once to accept EULAS.
- Be sure to reinstall Xcode's command line tools: `sudo xcode-select --install && sudo xcode-select --reset`.
- Be sure to fully uninstall brew, rbenv, rvm, all rubies and then reinstall.
- For your system-wide ruby, it's recommended that you use at least 2.3.3 and rbenv to manage your ruby environment.
* [OSS] [Pending] motion-cocoapods v1.9 currently breaks vendor library compliation. Use v1.8.
* [WatchOS] [Pending] Watch OS arm32_64 chipset architecture compliation is still in development and is expected to release
in RubyMotion 6.0 with Xcode 10.2 Beta 3 support.
* [Important] [News] [DragonRuby] Amir is expanding RubyMotion leadership team and bringing on two other partners. As soon as the entity
has been officially created a news entry will show up on RubyMotion.com.
* [Important] [News] [DragonRuby] Amir's talk for Ruby Kaigi 2019 has been accepted: Developing Games for the Nintendo Switch using Ruby.
* [simd] [ARKit] Native support added for vector C structures defined in simd.
* [crashlog] [backtrace] [caller] Crashlog no longer truncates.
* [Mojave] [BridgeSupport] Metadata from framework dependencies regenerated targeting latest MacOS SDKs.
* [DragonRuby] BridgeSupport is an integral part of RubyMotion. With regards to sustainable open source,
make sure you take the time to understand BridgeSupport's role in RubyMotion, and how to build it.
You can find the source code with instructions to build at: https://github.com/amirrajan/rubymotion-bridgesupport
Follows is a more in-depth explanation of changes in Mojave that impacted BridgeSupport:
# Sustainable open source and your responsibilities as a Ruby developer.
This "call to action" is now more important than ever given the current landscape of open source
and the recent BitCoin mining backdoor that compromised many NPM packages. We cannot rely
on the few to carry the burden of hard, low-level problems (not for free at least).
As Ruby devs, we rely heavily on open source software created over twenty years. And
given this mountain of dependencies, **seasoned Ruby developers have a responsibility to "go down the
stack" and help with the harder problems**.
Codename "DragonRuby" is my initiative where I will try to educate those who use RubyMotion
and provide a path of improvement and growth. We _have to_ bolster the ranks of those that can
contribute at the same level as the (right now very small) core Ruby team.
Take the time to read and internalize the following postmortem. Having these skills
will help you diagnose problems only the few know how to reason through (which is not a good thing).
# Changes to `dyld` in Mojave.
In Mojave, Apple introduced a new feature to their global library cache called `dyld`. The new feature
"closures for dyld cache" was used sparingly in previous versions of the OS, but its usage was
expanded in Mojave (speculatively to SIP).
# `dyld`'s usage expansion and the SEGFAULT in BridgeSupport.
BridgeSupport (an Apple-maintained library that RubyMotion leverages to interop with Objective C)
began to SEGFAULT on Mojave. After some trial and error, it was found that compiling BridgeSupport
against Ruby 2.3.7 fixed the issue. The issue was also fixed by disabling System Integrity Protection on Mojave
machines. Both these options were suboptimal (one would require all devs to install `rbenv` and Ruby 2.3.7,
the other required disabling an important piece of protection from the OS).
# Troubleshooting `dyld`
To being the troubleshooting process, BridgeSupport was recompiled with `dyld` debug flags enabled.
- `DYLD_LIBRARY_PATH=/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib`
- `DYLD_PRINT_WARNINGS=y`
Executing BridgeSupport with these flags yields the following on High Sierra:
```
dyld: found closure 0x7ffff48ae9ac (size=844) in dyld shared cache
dyld: closure 0x7ffff48ae9ac not used because DYLD_FRAMEWORK_PATH changed
```
The SEGFAULT occurs in `Init_bridgesupportparser` method when attempting to define the foreign function interface using
`rb_define_method`. On Mojave, the address of this method was corrupted. Using `dladdr` we see:
Here is what the output looked like on Mojave:
```
dladdr(0xd41682, 0x7feca739d290)
dladdr() => 1, { "/usr/bin/ruby", 0x100640000, "(null)", 0x0 }
dladdr(0x1007d71e7, 0x7feca739d2b0)
dladdr() => 1, { "/opt/rubymotion/RubyMotionBridgeSupport/DSTROOT/System/Library/BridgeSupport/ruby-2.3/bridgesupportparser.bundle",
0x1007c9000,
"Init_bridgesupportparser",
0x1007d71c0 }
```
On Mojave, `dyld` attempts to get the address for this method from `/usr/bin/ruby` (which should reside in `libruby.dylib`), but is
unable to do so.
# Stepping through C based foreign function interfaces.
To debug this issue, the following steps were performed:
- Make BridgeSupport.
- Export the following environment variable `export RUBYLIB='./DSROOT/System/BridgeSupport/ruby-2.3'`.
- Run LLDB (Low Level Debugger) with the following arguments:
```
lldb /usr/bin/ruby -- gen_bridge_metadata -o ./DSROOT/System/Library/BridgeSupport/libSystem.bridgesupport
```
- Once the debugger starts up, add a breakpoint:
```
br set -r Init_bridgesupportparser
```
- Run the program under LLDB: `run`.
- Once the breakpoint is hit, use LLDB's `si` command to step through each instruction. Eventually, the instruction will reach
the `rb_define_module` line.
- Performing an additional step yields the following data:
```
(lldb) disassemble
bridgesupportparser.bundle`rb_define_module:
-> 0x1039443dc <+0>: jmpq *0x1309c6(%rip) ; (void *)0x0000000000d41682
(lldb) si
* thread #1, queue = 'com.apple.main-thread', stop reason = instruction step into
frame #0: 0x0000000000d41682
error: memory read failed for 0xd41600
```
# Disabling `dyld` closures for BridgeSupport.
- Next, BridgeSupport was rebuilt using the following environment variables.
```
export DYLD_PRINT_APIS=y
export DYLD_PRINT_WARNINGS=y
export RUBYLIB='./DSTROOT/System/Library/BridgeSupport/ruby-2.3'
```
- And rerun:
```
ruby gen_bridge_metadata.rb -o ./DSTROOT/System/Library/BridgeSupport/libSystem.bridgesupport
```
- You'll see several messages with: "dyld: found closure ... in dyld shared cache". With one of the messages being:
```
dladdr(0xd41682, 0x7f82d37c5bc0)
dladdr() => 0
dladdr(0x1071a81e7, 0x7f82d37c5be0)
dladdr() => 1, { "/opt/rubymotion/RubyMotionBridgeSupport/DSTROOT/System/Library/BridgeSupport/ruby-2.3/bridgesupportparser.bundle",
0x10719a000,
"Init_bridgesupportparser",
0x1071a81c0 }
```
- The symbol resolved by `dladdr` `(0x7f82d37c5bc0)` to 0 is the 'rb_define_module' from the previous section.
- Next, `dyld` closures were explicitly disabled:
```
export DYLD_PRINT_APIS=y
export DYLD_PRINT_WARNINGS=y
export RUBYLIB='./DSTROOT/System/Library/BridgeSupport/ruby-2.3'
export DYLD_FRAMEWORK_PATH=
```
- Rerunning BridgeSupport:
```
ruby gen_bridge_metadata.rb -o ./DSTROOT/System/Library/BridgeSupport/libSystem.bridgesupport
```
Now yields the following log statements (indicating that closures will not be used):
```
dyld: found closure ... in dyld shared cache
dyld: closure ... not used because DYLD_FRAMEWORK_PATH changed
```
- This removed the SEGFAULT.
- Why this removed the SEGFAULT (and why disabling SIP resolves the issue) is unknown. A bug description has been submitted to Apple.
# Patching BridgeSupport's makefiles given the findings above
- Given the information above, the following patch was created for BridgeSupport for Mojave.
```
diff --git a/swig/Makefile b/swig/Makefile
index 51bc9be..47648e2 100644
--- a/swig/Makefile
+++ b/swig/Makefile
@@ -72,7 +72,7 @@ ldflags = $(RC_CFLAGS) -mmacosx-version-min=10.9 $(shell $(LLVM-CONFIG) --ldfla
dldflags =
archflag =
DLDFLAGS = $(ldflags) $(dldflags) $(archflag)
-LDSHARED = $(CC) $(RC_CFLAGS) -pipe -bundle -undefined dynamic_lookup
+LDSHARED = $(CC) $(RC_CFLAGS) -pipe -bundle
AR = ar
EXEEXT =
@@ -105,7 +105,7 @@ extout =
extout_prefix =
target_prefix =
LOCAL_LIBS =
-LIBS = $(LIBRUBYARG_SHARED) -lclangCodeGen -lclangAnalysis -lclangARCMigrate -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangFrontend -lclangEdit -lclangDriver -lclangAST -lclangParse -lclangLex -lclangBasic -lLLVMCore -lLLVMSupport -lLLVMBitWriter -lLLVMBitReader -lLLVMCodeGen -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMMCParser -lLLVMOption
+LIBS = $(LIBRUBYARG_SHARED) -lLLVMProfileData -lz -lcurses -lclangCodeGen -lclangAnalysis -lclangARCMigrate -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangFrontend -lclangEdit -lclangDriver -lclangAST -lclangParse -lclangLex -lclangBasic -lLLVMCore -lLLVMSupport -lLLVMBitWriter -lLLVMBitReader -lLLVMCodeGen -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMMCParser -lLLVMOption
SRCS = bridgesupportparser.cpp bridgesupportparser_wrap.cpp
OBJS = bridgesupportparser.o bridgesupportparser_wrap.o
TARGET = bridgesupportparser
```
- Details as to why the following patch fixes the issue is left to the reader to research.
# Insight and perspective of open source
This is what the core Ruby team does on a daily basis. For free. This is what RubyMotion does for you (with a heavily
discounted cost relative to competitors).
Those vocal about open source and its long-term viability must start "increasing" the bus factor. I hope the information above
gives you a window into Matz and company. Please be sure to thank them. And above all, start learning these techniques so the core
Ruby team doesn't have to carry these heavy burdens alone. We've deferred the cost of free (libre) open source for too long in my opinion.
Also, if you see an open source project that seems like a good option, but looks "dead". Do _not_ simply look for another option. It
is your responsibility to bring projects out of _dormancy_ if you feel it's useful to you.
This is important. The current trend of "take more than you give" must end for the long-term viability of open source. Get your hands
dirty. I promise. I (and by extension RubyMotion's subscription income) am here to help you reach the next level. Please help spread
the narrative of "if you find X useful, bring it out of dormancy".
= RubyMotion 5.16 =
* [Mojave] [BridgeSupport] [segfault] Disabling SIP on Mojave is not longer required. Nor is it
necessary to pass in DYLD_LIBRARY_PATH.
* [Starter Edition] Both MacOSX 10.13 and 10.14 are available for free. As Mojave adoption increases,
10.13 will be removed from the Starter Edition and will require an Indie license if that's a platform
you'd want to target.
= RubyMotion 5.15 =
* [Xcode 10.1] Supported added for Xcode 10.1.
* [Mojave] [BridgeSupport] [segfault] There is a pending bug submitted to Apple with
regards to BridgeSupport, System Ruby, and changes to Mojave SIP (System Integrity Protection)
and its treatment of PATH variables.
Because of this, you MUST disable SIP and pass the following path variable if you are
currently using RubyMotion on Mojave:
DYLD_LIBRARY_PATH=/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib rake