= Rubymotion 3.8 = * The toolchain has been upgrated to LLVM 3.5. * [Android] Added the `motion android-setup' command which downloads and installs the Android SDK and NDK automatically. Run the `motion android-setup --help' command for more information. * [Android] Added 'app.support_libraries' option in the Rakefile, which is an array containing the names of Android support libraries to be included in your app E.g.: app.support_libraries << 'google-play-services' app.support_libraries << 'android-support-v4' * [Android] Added support for API level 22. Removed support for very old versions of Android that are no longer supported in the SDK. * [Android] Added support to generate Ctags file via the `rake ctags' task. * [Android] Fixed a bug where classes.dex would not be re-generated when a resource file was changed. Thanks Eito Katagiri for the patch. * [Android] Fixed a bug where running specs would crash. * [iOS] Fix a bug where a build error would happen when building a project for ARM 64-bit using Xcode 6.3 Beta. * [iOS, OSX] Fixed the build system to not recompile `.strings' files on every build. * [iOS, OSX] Fixed a bug where `rake profile' could not launch Instruments.app when it will specify Instruments template with Xcode 6.2. * [iOS] Fixed a bug where `rake background_fetch=true' would not work with with Xcode 6.2. * [iOS, OSX] Fixed the build system to print a warning if a framework included in the Rakefile does not have a corresponding .bridgesupport file (e.g. it has been mispelled). * [iOS, OSX] Fixed the build system to not delete '.storyboardc' files if the corresponding '.storyboard' file does not exist. * [iOS, OSX] Fixed a rare case where gdb would be used instead of LLDB when running in debug mode. = Rubymotion 3.7 = * Fixed a bug where the `motion' command would not work as expected if Ruby was installed with rbenv/RVM. * [iOS] Fix a bug where the build system would not detect the properties of the running simulator if it existed with a different version of iOS. * [iOS] Fixed a bug where a WatchKit app would not launch on the simulator if it was built with x86_64 (64-bit Intel) only. * [iOS, OSX] Improved the symbolication of exception backtraces. Backtraces are now properly symbolicated when running on the device. This is done by parsing the dSYM bundle at runtime. For this to work, in development mode, the dSYM will be embedded within the application bundle. (This is disabled in release mode). You can control this setting with the `app.embed_dsym' variable in the project's Rakefile. * [iOS, OSX] Improved performance when creating empty Hash objects. ~2 times faster. * [iOS, OSX] Improved performance when creating very small Array objects. ~30% faster. * [iOS, OSX] Bridgesupport files for vendor projects are now generated in the common build directory (~/Library/Rubymotion/build). This fixes a problem when vendoring the Reveal framework. * [iOS, OSX] Added a feature to disable capturing view (command key + moving mouse over) in iOS simulator or OS X app. To enable/disable capturing view, run `enable_capture' or `disable_capture' commands in REPL. If you want to disable capturing before the application is launched, you can set the DISABLE_CAPTURE environment variable when you will run the `rake' command. (ex. `$ rake DISABLE_CAPTURE=1'). * [Android] The runtime is now using the GNU C++ stdlib for better internal support and also upcoming new features. * [Android] Improved compilation time, compiling multiple files in parallel. * [Android] Support for defining manual file dependencies via 'app.files_dependencies'. * [Android] Added Module#module_function. * [Android] Added Symbol#to_sym. * [Android] Added Time#usec. * [Android] Object#send now accepts strings. * [Android] Improved Kernel#rand to accept ranges (of fixnums and floats). * [Android] Fixed a bug where undefined local variables or methods returned false instead of raising an exception. * [Android] Fixed a bug where Java getter/setter shortcuts would sometimes not work. * [Android] Fixed a bug where a crash would happen when running a spec with a lot of test cases. * [Android] Fixed memory leaks when symbolicating an exception backtrace. = RubyMotion 3.6 = * [iOS] Added support for iOS 8.3. Xcode 6.3 beta is required. * [iOS, OSX] Fixed a bug where the build would fail when using Xcode 5. * [iOS] Fixed a bug where WatchKit applications could not be launched with Xcode 6.2 beta 5. * [iOS] Fixed a bug where device log wouldn't be displayed with `rake device' if `CFBundleName' property was changed. * [Android] Improved the build time of projects, by not compiling the internal bitcode of Ruby files that have not changed. * [Android] Added Math module. * [Android] Added Time#{+, -}. * [Android] Added Hash#{default, default=, default_proc, default_proc=}. * [Android] Added String#{[]=, slice!, chop, chop!, chomp, chomp!, sub, sub!, gsub, gsub!, split}. * [Android] Improved Float#to_s, String#[], Array#{[]=, values_at} for CRuby compatibility. * [Android] Improved Hash#{shift, replace} for CRuby compatibility. * [Android] Fixed a build error in a Bundler environment. * [Android] Fixed a bug where Array#[] would crash when returning a large array. * [Android] Fixed a bug where Array#delete would crash when removing a lot of elements. * [Android] Fixed a bug where Array#[start, length]= would crash when providing a large start position. * [Android] Fixed a bug where Array#pop(number) would crash when specifying a large number. * [Android] Fixed a bug where Array#flatten would crash when used on a large array. * [Android] Fixed a bug where String#scan would crash if many elements would be matched. * [Android] Fixed a bug where String#scan returned the wrong value if the Regexp group would be passed as argument. * [Android] Fixed a bug where attempting to retrieve a Java field on an inner Java class would always return null/zero on Android 21 / ART, apparently due to a JNI regression (we added a workaround). = RubyMotion 3.5 = * [iOS, OSX] Fixed a regression introduced by the previous release where the REPL would not work. = RubyMotion 3.4 = * [iOS] Fixed a bug where iOS 8 extensions and their host app could not have different deployment_target values. * [iOS] Fixed a bug where an incorrect architecture would be chosen when debugging on a device. Now defaults to the device architecture. * [iOS, OSX] Fixed a bug where small structure types couldn't be returned from Objective-C methods in 64-bit. * [Android] Added Bundler support to the project template. * [Android] Added the `app.theme' Rakefile variable to set up the theme of the app. The default value is `Theme.Holo'. * [Android] Added Array#{flatten, flatten!, slice, slice!}. * [Android] Added Enumerable#{reverse_each, each_with_object, each_entry, each_slice, each_cons, collect, map, count, find, detect, grep, find_index, flat_map, collect_concat, partition, group_by, first, all?, any?, one?, none?, min, max, minmax, min_by, max_by, minmax_by, member?, include?}. * [Android] Improved Array#[] for CRuby compatibility. * [Android] Disabled internal/debug VM logs since they impact launch time and general performance. If you want to set them back on (for debugging), the `app.vm_debug_logs' variable can be set to `true'. * [Android] Fixed a bug where Fixnum#* would cause a runtime crash if the receiver was zero. * [Android] Fixed a bug where an `ensure' statement would cause the project to fail to build, due to a linking error. * [Android] Fixed a bug in the Java method dispatcher where it would fail to call methods returning arrays of non-object types (ex. the `getBytes' method of java.lang.String). * [Android] Fixed a bug where trying to set/assign a value to a Java object field would cause a NoMethodError. * [Android] Fixed Enumerable#{each_with_index, select} to return an Enumerator when if no block is given. * [Android] Fixed a bug where Enumerable methods would be taken in priority over Hash methods (ex. `select'), due to the fact that the module was included in the wrong class. * [Android] Fixed a bug where the use of the `break' keyword inside a block would cause a compilation crash. * [Android] Fixed a bug in the spec framework where the `main_activity' helper method would only work as expected in the first spec file, and return nil in other spec files. = RubyMotion 3.3 = * [iOS] Fixed a bug where a WatchKit application could be launched on an iOS 8.1 simulator, which does not actually support WatchKit and would crash. * [iOS] Fixed a bug where the compiler would no longer emit proper DWARF metadata for ARM64 due to an Xcode / clang change. * [iOS] Print an informative error when no simulator devices are configured. * [iOS, OSX] Fixed a bug where the #== method in a pure Ruby object would not resolve WeakRef operands. * [iOS, OSX] Fixed a bug where small structure cannot be passed into Objective-C funcitons with 64-bit app. * [iOS, OSX] Fixed a bug where the #kind_of? method in an ImmediateRef would not compare against the reference object's class. * [iOS, OSX] Fixed a memory leak in Array#{uniq, uniq!, compact, compact!, select, select!, keep_if}. * [iOS] Fixed a bug where it would trigger a crash when Ruby method which has 5 or more arguments will be called from Objective-C code in arm64 device. * [OSX] Updated Edit menu to include items generated by Xcode. Thanks to Hwee-Boon Yar for the patch (pull request #187). * [Android] Introduced app.manifest, which makes it possible to directly manipulate the contents of the AndroidManifest.xml file from the Rakefile. Read the documentation in the "Providing Custom Values" section of the Android Project Management guide on the Rubymotion website. Thanks to Daniel Brooker for the patch. * [Android] Added String#{[], slice}. * [Android] Fixed a bug where projects with an XML file in the 'resources' directory would not compile correctly. * [Android] Fixed a bug where Object#instance_eval would crash when targeting old versions of Android (below 14). * [Android] Fixed a bug where Ruby methods and blocks where limited by the number of arguments they could accept. * [Android] Fixed a bug where Hash would not include Enumerable. * [Android] Fixed a bug where Ruby Hash methods (ex. #[]) would not be available on Java *Map objects. * [Android] Fixed a bug where Hash objects with a default Proc (ex. created with `Hash.new {}') would not dispatch the Proc when a key isn't found. * [Android] Fixed a bug where Ruby String methods were not available on java.lang.String objects. * [Android] Fixed a bug where passing java.lang.String objects to Ruby String methods expecting String arguments would cause a runtime crash. = RubyMotion 3.2 = * [iOS] Fixed a bug where RubyMotion frameworks could not be loaded due to required RubyMotion symbols being stripped from application/extension. * [iOS] Pick-up new certificates prefixed with `iOS` instead of `iPhone`. * [iOS] Fixed a bug where WatchKit applications did not honor `xcode_dir`. * [iOS] Fixed a bug where it couldn't debug with `rake device debug=1' on device. Now, debugging only support `armv7' in `app.archs['iPhoneOS']'. (i.e. app.archs['iPhoneOS'] = ['armv7']) * [iOS] Fixed a bug where it could not deploy app to iOS 8.2 beta 3 device. * [iOS] Fixed a bug where it could not deploy app which contained Watch app. * [OSX] Fixed a bug where NSString#initWithXXX would trigger a crash by double free. * [iOS, OSX] Fixed a bug where the view object wouldn't be released when it was created by #init(arg) and super() method. * [iOS, OSX] Fixed a bug where `nil.isEqual(nil)' would not return `true'. was created by #init(arg) and super() method. * [iOS, OSX] Fixed a memory leak when invoking blocks with Dispatch::Queue. * [iOS, OSX] Fixed a bug where Marshal.dump would trigger a crash. * [Android] Added Bignum#{+@,-@,%,modulo,&,|,^,~,<<,>>,<,<=,>,>=,<=>,abs, to_i,to_int,to_f}. * [Android] Added Time#{to_s, to_i, inspect, <, <=, >, >=, <=>, ==, !=} and Time.at. * [Android] Improved Fixnum#{%, <=>, &, |, ^, <<, >>} to take a Bignum in argument. * [Android] Fixed a bug where gen_bridge_metadata would not detect classes that implement interfaces. * [Android] Fixed a bug where gen_bridge_metadata would not work if the user had java 8.0 installed (`javap' was emitting unrecognized syntax). Thanks to "Theo" for the detective work and the patch. * [Android] Fixed a bug where gen_bridge_metadata would emit template information in class/interface names, which would then break the compiler. * [Android] Fixed a bug where gen_bridge_metadata would fail to emit proper list of methods for a class that had a static initializer. * [Android] Added the `:native' parameter for `app.vendor_project' which can be used to specify a 3rd-party shared library to include in the app. Thanks to René Köcher for the patch. * [Android] Fixed the extra-packages argument to work with multiple packages. Thanks to Tom Carey for the patch (pull request #185). = RubyMotion 3.1 = * [iOS] Fixed an API validation error when submitting an application that contains an extension. * [iOS] Fixed a regression that made it impossible to set environment variables from a host application and propagate them to extensions. * [iOS] Fixed a regression that made extensions crash at startup. * [iOS] Fixed a regression where a Info.plist file would be generated with wrong details for Background Fetch. * [iOS] Fixed a bug where `rake background_fetch=1' for background fetch would not work with Xcode 6.x. * [Android] Added Fixnum#{~,&,|,^,<<,>>,+@,integer?,odd?,even?}. * [Android] Added Float#+@. * [Android] Added Bignum#integer?. * [Android] Fixed Fixnum#times to return an Enumerator when no block is given. = RubyMotion 3.0 = * [Android] RubyMotion for Android support has been merged. Please refer to the pre-release NEWS file for past changes, and check out our developer guides for more information about this new platform support. * [iOS] Added support for WatchKit applications. Add a target to your iOS application by creating a WatchKit project with the command: `$ motion create MyWatchApp --template=ios-watch-extension` and then configure your iOS application by adding: `app.target 'path/to/MyWatchApp', :extension` Then from the root of your iOS application, *not* the WatchKit application, invoke `$ rake watch` to build your iOS and WatchKit applications and launch the WatchKit application on the simulator. Additional launch options are `type=glance` for Glance applications, `type=notification payload=path/to/payload.json` for Notification applications, and `display=regular` or `display=compact` to launch the 42mm or 38mm Watch displays respectively. * [iOS] Added support for specifying launch images from asset catalogs. * Added support for iOS 8.2 (beta). You will need to install an Xcode 6.2 beta to support it. * [iOS] Fix `rake crashlog:device' crash report symbolication. * [iOS] Fixed a bug where Bundler wouldn't be used when it will build Extensions and Frameworks. * [iOS] Create a `UIViewController`, `UINavigationController`, and `UIWindow` in the default new application template. * [OSX] Only build for 64-bit (`x86_64`) by default. * [iOS] Enabled arm64 support by default for iOS projects. * [iOS] Honour explicit `device_name` or `target` specified by user. Specifying both is disallowed, because a device is configured for a specific SDK. * [iOS] Fixed a regression where Extension and Frameworks could not build for the iOS device platform. * [iOS] Fixed a bug where `rake spec' would return 0 as exit code even if it failed due to a crash. * [iOS] Fixed a bug in `rake spec' where #tap and #rotate_device were causing a crash when ran in 64-bit mode (simulator). * [iOS] Fixed a bug where all rake task could not be run under the root directory of Extension or Framework, preventing CocoaPods libraries to be installed properly. * [iOS] Fixed a bug where shared frameworks would not be built for 64-bit. * [iOS] Fixed a bug where it was not possible to customize the Action and Share extension's icon. The `app.icons' property can now be set in the extension's Rakefile. * [iOS] Fixed a bug where extensions could not be built if Bundler was not installed due to a Pathname dependency. * [iOS] Added launch images for iPhone 6 and iPhone 6 Plus. Thanks to Hwee-Boon Yar for the patch (pull request #170). * [iOS] Fixed the "ERROR ITMS-9000" error when trying to submit an app that contained extensions. Thanks to Hwee-Boon Yar for patch. * [iOS] Fixed a bug where the relative path cannot be used in `app.provisioning_profile'. * [iOS] Fixed a bug where iPad simulator would not launch app as 64-bit even if app contains 64-bit binary. Changed default simulator to `iPad Air'. * Fixed a regression where a link error would be caused in Xcode when trying to use a static library which was generated by `rake static'. * Fixed a bug where the wrong Boxed object would be returned from an Objective-C method. * Fixed the `motion support' command invocation to print both the stable and pre-release versions of RubyMotion. * Fixed a bug where a "Symbol not found" exception would be triggered when trying to use a constant which was not defined in an older SDK version. * Fixed a bug which it would not solve framework dependencies in embedded frameworks. * Fixed a memory leak when invoking blocks passed to Dispatch::Queue. * Fixed a bug where `rake profile' could not launch Instruments.app when being given the Instruments template with Xcode 6.2 Beta. = RubyMotion 2.38 = * Optimized the app executable size when a project has too many Ruby source files, by removing unnecessary internal code. ~30-60% lighter. * Disabled armv7s support for iOS projects. If you want to add armv7s support back, simply add the 'armv7s' value to the `app.archs['iPhoneOS']' config in the project's Rakefile. This architecture is no longer enabled by default in Xcode. * Fixed a bug where a compiled Core Data model would be removed when cleaning when an original `xcdatamodeld' was not available. * Fixed a bug where in certain circumstances cleaning would try to be performed when the vendor dir, e.g. `vendor/Pods' did not exist. * Fixed a few cases where the Yosemite version number was parsed incorrectly. * Added support for `axel' as an alternative to `curl' when downloading updates, which supports resuming and uses 10 connections to improve speed. Axel is available from http://wilmer.gaast.net/main.php/axel.html or can be installed through Homebrew: `$ brew install axel'. * Fixed a regression where `rake spec' did not work on OS X platform. * Fixed a bug where Dispatch.once did not work correctly with x86_64 on iPhone simulator and i386 on OS X platforms. * Fixed a bug where `:cflags' for `:static' vendored projects could not override those set by the toolchain by default. E.g. `-fno-modules'. * Fixed the `motion --version' command invocation to print both the stable and pre-release versions of RubyMotion. * [OSX] Fixed a bug where embedded frameworks would not be codesigned as per the current requirements for the App Store. * [iOS] Removed `Symbols not found...' message when app will be deployed into iOS device if Xcode dumped device symbols into user directory. * [iOS] Fixed a bug which it could not recognized Provisioning Profile which is generated with "iOSTeam Provisioning Profile". * [OSX] Fixed a bug where BigDecimal#inspect would return invalid string on Yosemite. = RubyMotion 2.37 = * Fixed a regression where Dispatch.once did not work correctly when it was invoked in some points. * Fixed a bug where the compiler would crash with an assertion message `[BUG] Object: SubtypeUntil ...' when compiling certain Ruby files. * Fixed a bug in the compiler when compiling for ARM64 where certain types would still be emitted with a 32-bit architecture in mind. * Fixed a bug in the compiler when compiling for ARM64 where certain structs would not be properly available (such as NSDecimal). = RubyMotion 2.36 = * Added ARM64 support (64-bit) for iOS. It is not yet enabled by default for applications that do not embed Frameworks or App Extensions. In order to enable it on other builds add the following line to your project's Rakefile: app.archs['iPhoneOS'] |= ['arm64'] * iOS 4.3 and OS X 10.7 are no longer supported, due to internal changes that require us to use a newer C++ standard library. * [iOS] Fixed a bug where the `app.provisioning_profile' setting would not be configurable in the Rakefile of App Extensions projects. * Fixed a bug when copying an `ImmediateRef', which isn't needed anyways, because a tagged pointer can not be duplicated either. * Fixed a bug where Xcode 6 would cache precompiled headers in a hidden location and subsequent vendored builds could fail after cleaning. * Fixed a bug where a failed vendored build could cause subsequent builds to never actually start. * Fixed the build system to remove Xcode 6 noise from vendored build output. * Fixed a bug where the #supportedInterfaceOrientations method would be not properly included. * Fixed a race condition bug in the runtime where a crash would occur if the same Objective-C constant was being resolved at the same time from different threads. * Fixed the `motion changelog' command to honor the `--pre' flag, which will open the pre-release NEWS file instead. * Fixed the `motion update --pre' command to print a reference to the `motion changelog --pre' command. * Improved IO#.read performance to read from files. ~4 times faster. = RubyMotion 2.35 = * Added support for iOS 8.1 (beta). You will need to install Xcode 6.1 GM Seed in order to target it. * Fixed a bug that could occur when the only available SDKs are newer than the available BridgeSupport metadata. * [iOS] Fixed a bug where it would not symbolicate with `rake profile:device`. The dSYM file path was changed to fix a bug. * [iOS] Fixed a bug where the RubyMotion shared framework would not update even if it changed the code in framework. * [OSX] Fixed a bug that would always cause the REPL to crash. * Fixed a bug where GLKit functions would trigger a crash when it will run app on iOS simulator. = RubyMotion 2.34 = * All iOS and OS X versions of the runtime have been recompiled with Xcode 6. * [iOS] Add support for iPhone 6/6+ launch images. Unless explicitely specified, the Info.plist `UILaunchImages' key is populated from all PNG files in the resource directories that start with Default. For iPhone 6/6+ use the `-667h' and `-736h' filename modifiers. * [OSX] Fix a bug that made it impossible to build a OS X app on Yosemite with Xcode 6 GM, even when targeting 10.9. * Fixed a bug that ommitted class and protocol methods from the ctags. Patch by Rakesh BS. * Improved exception backtrace symbolication performance by ensuring the dSYM bundle is used when available. * Improved Enumerable#inject performance. ~40% times faster. * Fixed a bug that could cause `clang++' to be called with too many arguments for a shell to handle. * Fixed a bug that could cause `gen_bridge_metadata' to be called with too many arguments for a shell (on Yosemite) to handle. * [OSX] Fixed a bug that made it impossible to use a `NSApplication' subclass. * [OSX] Fixed a bug where it would trigger a crash when it will evaluates a expression on REPL on Yosemite. * [OSX] Fixed a bug where the build directory for 3rd-party library wouldn't be removed with `rake clean' command. * [OSX] Fixed a bug where it didn't handle `NSTaggedPointerString' objects when it configured lower OS X version as deployment target on Yosemite. * [OSX] Fixed a bug where `rake debug=1' freezes lldb with Xcode 6 GM. * [iOS] Changed default simulator to 'iPhone 6' which it would be introduced by Xcode 6 GM. * Fixed a bug where Instruments didn't launch if it would specify a template name with "rake profile template='xxx'". * Fixed a bug where Method#owner will return incorrect owner if the method in inherited class would be overrided. * Fixed a bug where wrong method would called when it would include module which have #viewWillAppear and #viewWillDisappear implementations. * Fixed a bug where method would not called when it would include some module which have #viewWillAppear implementations. * Fixed a bug where #method_missing would receive incorrect arguments after calling was cached. * Fixed a bug where the build system would ping the update server for each target an application project includes. * Fixed a memory leak which was created when huge splat would be passed into the methods since second argument. * Improved Regexp.last_match performance. ~20% faster. = RubyMotion 2.33 = * Added support for installing pre-releases of RubyMotion. The `sudo motion update --pre' command will install a pre-release build in `/Library/RubyMotionPre'. Currently, the pre-release channel contains the first beta of RubyMotion for Android. Enjoy! ^_^ = RubyMotion 2.32 = * The iOS 8.0 and OS X 10.10 versions of the runtime have been recompiled with Xcode 6 Beta 6. * [iOS] Depracted rake options `device_family' and `retina' in favor of `device_name' which takes the name of one of the configured device-sets found in Xcode -> Window -> Devices or the `simctl' tool (its location can be found in the message shown when using one of the deprecated options). * [iOS] Added support for iOS 8 App Extensions. See the `motion create --help' output for a list of available templates and configure your host application with the following: `app.target("path/to/extension", :extension)'. * [iOS] Added support for frameworks that allow you to share code between your host application and its extensions. Use the `ios-framework' template for `motion create' and configure your host application with the following: `app.target("path/to/framework", :framework)'. * [iOS] Fixed a bug where backtraces could not be symbolicated on the iOS 8 Simulator. * [iOS] Fixed a bug where the iOS 8 Simulator could not be launched with the default device config. * [iOS] Fixed a bug where the iOS 8 Simulator could not be used to select views in the REPL. * [iOS] Fixed a bug where the REPL view selection would incorrectly invert the coordinates for the landscape orientation on iOS 8. * [iOS] Fixed a bug where "xcodebuild: error:" message would be displayed when it will configure `app.xcode_dir' for Xcode6 path. * [iOS] Fixed a bug where Instruments.app does not launch with `rake profile' on iOS 8. * [iOS] Fixed a bug where `iPhone 4s / iOS 7' simulator was always launched if Xcode 6 location path was specified through `app.xcode_dir'. * [iOS] Fixed a bug in iOS 8 where Hash objects could not be passed as an object of an NSUserDefaults. * [iOS] Added `app.embedded_frameworks' configuration to support dynamic framework on iOS 8. * Fixed a bug where headers in nested symlinked directories could not be used with `vendor_project' and an Xcode project. * Fixed a regression where a crash would happen when calling user defined method if the same method was already defined in some classes in Apple SDK. * Fixed a regression where a crash would happen when calling methods after used a method with variadic arguments. * Fixed a bug where a "not precompiled" error would happen when calling the SKPhysicsWorld method which takes with Objective-C Blocks. * Fixed a bug which superclass method would be called if method was removed through Module#remove_method. * Fixed a bug which it would trigger crash when the method for KVO was called. * Fixed a bug where overrode Time#+ would not be called. * Fixed a bug which it would trigger random crash when #method_missing will be called. * Fixed a bug where it would cause a "Permission denied" error if vendor library directory was not writable. * Improved Module#define_method performance. ~3 times faster. * Improved Object#method_missing performance. ~8 times faster. * Reduced the app boot time. ~40% faster. = RubyMotion 2.31 = * The iOS 8.0 and OS X 10.10 versions of the runtime have been recompiled with Xcode 6 Beta 4. * Fixed a regression where a crash would happen when calling methods with variadic arguments. * Fixed a bug where Unicode characters outside the BMP of a String object would not be properly extracted when passed to an Objective-C API. * Fixed a bug where a "not precompiled" error would happen when calling the NSURLSessionDownloadTask#cancelByProducingResumeData method. * Fixed a bug where a crash would happen when trying to override a method that has `MKOverlayRenderer' arguments (ex. #drawMapRect:zoomScale:inContext:). * Fixed a bug where trying to retrieve a value from a Hash object using a key wrapped as a WeakRef would not work as expected. * [iOS] Fixed a bug where ^C would not terminate the `rake debug=1' debugging session immediately. * [iOS] Fixed a bug where custom debug commands (ex. `pro', `pri') would not work in a remote/device debugging session. * [iOS] Fixed a bug which user-defined debug commands would not be loaded in a remote/device debugging session. = RubyMotion 2.30 = * The iOS 8.0 and OS X 10.10 versions of the runtime have been recompiled with Xcode 6 Beta 2. * Added the `device_name' parameter in order to select iOS 8 simulater device. You can use "iPhone 4s", "iPhone 5", "iPhone 5s", "iPad 2" ,"iPad Retina", "iPad Air", "Resizable iPhone" and "Resizable iPad" for device name. (Ex rake device_name="Resizable iPhone") * Improved the compiler to optimize the app executable size, by removing unnecessary internal Objective-C stubs. Apps should be 10-30% lighter, depending on how much native calls they use. * Added the BigDecimal#{to_i, to_int, to_f, to_s, coerce, +@, -@, modulo, quo, power, floor, ceil, round} methods. * Added the Kernel#BigDecimal method. * Improved String interpolation performance. ~10% faster. * Improved the NoMethodError exception message to include the full Objective-C selector. Also, #method_missing will now receive the full Objective-C selector as the method name. * Fixed a bug where spec helpers nested in sub-directories were being considered spec files instead of helpers. Thanks to Ignacio Piantanida for the patch. * Fixed a bug where a crash due to an assertion would be happening when using #layout on a MIDIPacketList object on iOS 8. * Fixed a bug where a crash would happen when calling a Objective-C method supposed to return a block, but instead returning nil. * Fixed a bug where a crash would happen when a Symbol object was used with the NSCoding interface methods. * Fixed a bug where shortcut selectors would not work when the method name was begining or ending with a number. * Fixed a bug where the `scrollViewWillEndDragging:withVelocity: targetContentOffset:' delegate method would not be defined properly. * Fixed a bug where a crash would happen when a Struct object was used with the NSCoding interface methods. * Fixed a bug where the `NSJSONSerialization' interface would return a BigDecimal object if the `0.0' value was stored in the original JSON data. * Fixed a bug where dynamically-defined methods would not be removed properly. * Fixed a bug where typedef parameters would cause a "not precompiled" error. * [OSX] Fixed the runtime to recognize `NSTaggedPointerString' objects that were introduced in Yosemite. * [OSX] Fixed a bug with the `NSManagedObjectModel#entitiesByName' method of the CoreData framework where it would return an NSDictionary that was not expected on 10.9. * [OSX] Fixed a bug where the default value for `app.deployment_target' was wrong and would cause a build error on an old version of OS X. * [OSX] Fixed a bug where a "not precompiled" error would happen when specifying an older version OS X version for `app.deployment_target' when building on Yosemite. = RubyMotion 2.29 = * Added support for Xcode 6 Beta 1 and iOS 8.0 / OS X Yosemite (10.10). * Fixed a bug where objects removed by Array#delete would not released. * Fixed a bug where a `not precompiled' error would happen when calling an alias to an Objective-C method with a C-level block argument. = RubyMotion 2.28 = * Added support for `BigDecimal'. This class is implemented on top of `NSDecimalNumber' and currently adds all the `BigDecimal' operator methods. It can be passed to APIs that require `NSDecimalNumber *', `NSDecimal', and pointers to `NSDecimal'. * Fixed a bug with framework search paths that contain spaces. * Fixed a bug with Objective-C methods that expect a void-pointer to an object (`id'/`CFTypeRef') and thus a `Pointer'. The object is now passed as-is. * Fixed a bug with the CoreMIDI BridgeSupport metadata on platforms that have 64-bit support where the MIDI types would be unavailable. * Fixed a bug where empty `.strings' files would lead to a build failure. * Fixed a bug where methods returning NSNotFound would return an incorrect value to Ruby. * Fixed a bug where a crash would happen when trying to call a Proc object generated by Method#to_proc. * Fixed a bug where an NSNumber object would not be converted to a Ruby Numeric object in the context of Objective-C Subscripting. * Fixed a bug where `super' couldn't be used with keyword arguments. * Fixed a bug where an incorrect cache would be used internally and would trigger an exception when shortcut selectors were used. * Fixed a performance issue when deallocating many objects. * Reduced the app boot time. ~15% faster. * Improved Object#method_missing performance. ~10% faster. * Improved performance where creating Objective-C selectors internally. As an example, Object#{send, respond_to?} is now ~30% faster. * Improved String interpolation performance. ~10% faster. = RubyMotion 2.27 = * Added support for localization `.strings' files which will be compiled as binary files. Thanks to Hwee-Boon Yar for the patch (pull request #154). * Added support for `NSLocalizedString' and friends. These are now available on `Kernel'. * Added missing AudioUnit bridgesupport metadata. * Improved the file dependencies detection code to spend less time when working on a project that has a significant number of dependencies. Thanks to Ignacio Piantanida for the detective work. * Fixed a regression introduced in RubyMotion 2.25 that was causing a build error in environment using Ruby 1.8. * Fixed a regression introduced in RubyMotion 2.25 that was causing a `not precompiled' error if the method would handle a BOOL pointer as an argument. * Fixed a bug where Boxed subclasses could not be re-opened safely. * Fixed a bug which shortcut for the method which was implemented on Ruby would not respond. = RubyMotion 2.26 = * Fixed a regression introduced in the previous release that was causing a crash when checking if a class supports weak references on iOS 6. = RubyMotion 2.25 = * Added support for Xcode 5.1 and iOS 7.1 final. * Added support for OSX 10.6 as deployment target (experimental). * Improved user feedback by printing a warning when overriding a protocol method that was previously defined with one of the `attr_*' methods. This may print false positives. * Improved `rake ctags' to index the application's .rb files. Thanks to Hwee-Boon Yar for the patch (pull request #152). * Improved use of `WeakRef' to raise an exception when trying to create a weak reference to one of the unsupported classes. For more information, see `Which classes don’t support weak references?' at http://bit.ly/1iiSOaU. * Added some introspection support to `ImmediateRef'. It can now report the actual class, its methods, and a inspect description string. * Added gemspec call to Gemfile for gem template. Thanks to Mark Rickert for the patch (pull request #151). * Fixed a bug where `rake device debug=1' did not work with Xcode 5.1. * Fixed an error in `rake device debug=1' if it would use UTF-8 as app name. * Fixed a bug where an application could not be installed and launched on the Simulator or a device due to the application bundle containing a directory called `Resources'. This will now fail the build with a descriptive error. * Fixed a bug where the OS X REPL did not work on 10.7 Lion. * Fixed a bug where KVC property validation methods defined in Ruby would not be compiled with the appropriate (Pointer) types. * Fixed a bug where Ruby methods defined on Objective-C tagged pointer objects could not call methods on itself. * [iOS] Made `tap' test helper work with `UISwitch'. * Fixed a bug where methods with BOOL arguments would not be handled properly. * Fixed a bug where the cycle detector did not work for Array/Hash objects. * Fixed a memory leak in Object#{method, public_method, instance_method, public_instance_method}. * Fixed a bug where Boxed#copy would cause a crash. * Fixed a bug where Range#copy would cause a malloc_error_break error. * Improved Object#instance_variable_set performance. ~20% faster. * Improved Object#method performance. ~50% faster. * Improved method dispatcher performance. ~5% faster. * Improved fine-grained lock performance. ~20% faster. * Improved memory management performance. ~25% faster. = RubyMotion 2.24 = * Fixed a regression introduced by the last build where environments running versions of Ruby not handling source files as unicode by default would be broken due to the presence of a unicode character in one of the files. = RubyMotion 2.23 = * Added support for objects conforming to the Subscripting interface (Objective-C Literals). * Fixed a bug with the `motion activate' CLI command. Thanks to Joffrey Jaffeux for the patch. * Fixed a regression when specifying external templates to `motion create'. * Fixed a bug where WeakRef.new would cause a crash when nil, true, false, Fixnum or Float objects were passed. * Fixed a bug where `vendor_project' with `:static' did not reuse `:cflags' for the BridgeSupport generation. * Fixed a bug where manually created BridgeSupport metadata files were no longer being used by the compiler. Now if one exists in the root of the lib dir, that will be used instead of one in the platform-specific build dir. * Added temporary files that are sometimes generated by the REPL to the default `gitignore' file. Thanks to Mark Rickert for the patch (pull request #150). * Added support for "value of def-expr" feature (ex. `def foo; end' returns the `:foo' symbol). * Fixed a bug where NSDate.distantFuture returns a wrong value. * Fixed a memory leak when an exception message is created. * Fixed a bug where the cycle detector would be activated during asynchronous Dispatch::Queue blocks even if ARR_CYCLES_DISABLE was set. * Fixed a bug where #send would freeze the app when passed a method name which accepts a bool if the method would be used with #send only. * Optimized methods converting implicitely types using #to_str etc. * Improved String#to_sym performance. ~40% faster. * Improved performance in dispatcher. ~20% faster. * Improved performance where allocates internal memory of String objects. ~10% faster. * Improved performance of methods where accepts Regexp object. ~20% faster. * Improved String literals performance. ~60% faster. * Improved String performance where it handles short strings. ~25% faster. * Improved String#{strip, rstrip, lstrip} performance. ~70% faster. * Improved String#{[], []=, +, =~} and Array#+ performance. ~20% faster. * Improved String#{==, !=} performance. ~50% faster. * Improved String#include? with UTF-8 strings performance. ~15% faster. * Improved String#{==, <=>}, NSString#== and Hash#== performance if it would compare other class object. ~8 times faster. * Improved Time#{+, -} performance. ~25% faster. * Improved Time#{==, !=, <, <=, >, >=} performance. ~2 times faster. * Improved Time#+ with float performance. ~80% faster. * Improved Array#{==, !=} performance. ~25% faster. * Improved Hash#{==, !=} performance. ~50% faster. * Improved Range literals performance. ~20% faster. * [iOS] Fixed a bug with the `flick' UI test helper not working with `UISwitch' on iOS 7. * [iOS] Added support for launching an application for background fetch in the iOS Simulator with the `background_fetch=1' rake option. * [iOS] No longer query the simulator application for its window metrics when it is connected to a REPL but not the active application. * [iOS] Improved the automatic selection of codesign certificates. * [iOS] Improved error reporting when specifying the rake `target' option with a version lower than the configured deployment target and when specifying `retina=false' when targeting iOS 7. * [OSX] Fixed a bug where the REPL wouldn't work in development mode if the app is sandboxed. * [OSX] Removed backtrace symbolication when an application is sandboxed and print the command to allow the user to symbolicate themselves instead. * Jim Weirich, 1956 - 2014. Without you I would not exist. Rest in Peace. = RubyMotion 2.22 = * Fixed a bug with `vendor_project' and prebuilt libraries, where the BridgeSupport file could not be created, as the build directory wouldn’t exist yet. * Fixed a bug with `vendor_project' and Xcode projects, where the BridgeSupport files were being searched in the wrong location. = RubyMotion 2.21 = * Added reference zeroing to `WeakRef' starting from iOS 5 and OS X 10.7. It will now raise an exception in case a message is sent after the reference has been deallocated. Use the `WeakRef#weakref_alive?' method to check if it has been deallocated or not. * Improved performance where Array elements would be converted from Ruby to Objective-C instance. ~10% faster. * Fixed a bug where incorrect SDK version values were being used in the Info.plist file resulting in iOS App Store submissions being rejected. * Fixed a bug where `motion update --cache-version=X' is broken. * Fixed a bug where vendored Xcode OS X projects were build with the IPHONEOS_DEPLOYMENT_TARGET option instead of MACOSX_DEPLOYMENT_TARGET. * Fixed a memory leak where the objects with a cyclic reference would not be released when used inside an asynchronous Dispatch::Queue. * Fixed a bug where BridgeSupport files for external projects included via `vendor_project' were being shared across platform and not removed with `rake clean'. = RubyMotion 2.20 = * Improved command-line interface, e.g. `$ motion create --help' will now no longer create an application called ‘--help’. This deprecates the interface for any command plugins and this will fully be removed with RubyMotion v3. * Added support for loading plugins through RubyGems. Libraries that used to use `~/Library/RubyMotion' to load commands and/or templates should no longer do so, but instead add a `lib/motion_plugin.rb' file (see Joybox for an example). The `~/Library/RubyMotion' is from now on only meant for local usage, i.e. outside of the scope of a gem. * Added the Proc#owner method, which returns a reference to the object the block was created from (the `self' reference). * Improved Rational performance. ~4 times faster. * Improved Proc#new performance. 15% faster. * Improved performance of Range objects created with the literal syntax. ~80% faster. * Improved Object#inspect performance. ~25% faster. * Improved Object#!~ performance. ~3 times faster. * Improved Object#{send, respond_to?} performance. ~30% times faster. * Improved performance in dispatcher. ~25% faster. * Improved performance of arithmetic methods with Float objects in 32-bit. ~80% faster. * Fixed a bug where methods accepting variadic arguments would not be working as expected when a method of the same signature was used before. * Fixed a bug in the build system with Ruby 2.1 where an application whose name contains UTF-8 characters could not be built. * Fixed a race condition bug in the runtime where a crash would occur if the same Objective-C constant was being resolved at the same time from different threads. * Fixed the runtime to be able to deal with all tagged pointers from the Objective-C world. For instance, using NSTaggedManagedObjectID would lead to a runtime crash. * Fixed a bug where the user defined bang (!) method would be not called. * Fixed a memory leak when creating compile time constants. * Fixed a memory leak in Dispatch::Queue.new. * Fixed a memory leak in Array#shift. * Fixed a bug where Method#to_proc would not return a lambda block. * Fixed a bug where CFType structures in AudioToolbox could not be used. * Fixed a bug which Kernel.raise could not raise an NSException object. * Fixed a bug where #alias and #respond_to? methods would cause a race condition. * Fixed a bug in the compiler that would ignore BridgeSupport enum values if they only have a 64-bit value. * Fixed a bug where NSMutableArray#delete_at would immediately release an object. * Made `vendor_project' accept glob patterns for the `source_files' option. * Made BridgeSupport metadata generation for `vendor' projects by default use the `:cflags` option. * [iOS] Made the UI test helper search for views from the `keyWindow' instead of the `current' window that was created specifically for the test. This makes it easier to interact with modal views such as `UIAlertView'. * [iOS] Fixed a bug in the build system where a link error would be caused when building for arm64 with Xcode 5.1. Thanks to Andrew Larssen for the patch (pull request #146). * [OSX] Fixed a bug where an NSDate object convered to a Time object would cause a calculation error. * [OSX] Fixed the `rake crashlog' task. * [OSX] Added `external_frameworks' config variable, which is used for frameworks that are outside of `/System/Library/Frameworks`, but are not meant to be embedded inside the application. E.g. `/Library/Frameworks/iTunesLibrary.framework'. * [OSX] Fixed a bug where method types of NSOpenPanel and NSSavePanel were not being cached for their private counterparts that are substituted at runtime in case the application is running in a sandbox. = RubyMotion 2.19 = * [iOS] Fixed a regression related to the sim launcher changes for Xcode 5.1 that broke `rake simulator debug=1`. * [OSX] Fixed a regression where #eval support was not working anymore. * Improved Hash#{default, shift} when Hash#default_proc returns a block. 2 times faster. * Improved comparison iterator blocks that return Float objects. (Ex. Array#sort{|a,b| return float_object }). 2 times faster. = RubyMotion 2.18 = * Added the `rake crashlog:device' task which will download crash reports generated by the app on the device, symbolicate them and save them on the local file system. The latest generated file will then be automatically opened in Console.app. * Improved the terminal output when using `vendor_project` with an Xcode project so that it matches the build system output. This feature is using the XCPretty project. Thanks a lot to Marin Usalj and Delisa Mason for it. * [iOS] Fixed a bug where applications could not be launched on the simulator when using Xcode 5.1. Due to this change, Xcode 4 is no longer supported. * [OSX] Fixed a bug where apps generated on i5/i7 machines would fail to run on older machines (ex. core2) due to the use of a new instruction. * Fixed a bug where Hash#{[]=, clear, removeObjectForKey} will immediately release an object. * Fixed a bug where Array#{delete, clear} will immediately release an object. * Fixed a bug where Struct#[]= and setter of Struct member will immediately release an object. * Fixed a bug where setter of Boxed member will immediately release an object. * Fixed a bug where Kernel#instance_variable_set will immediately release an object. * Fixed a bug in the cycle detector where weak Proc objects would have their `self' reference scanned, resulting in a double-release crash at runtime. * Fixed a bug where Kernel#block_given? would not work as expected if a Proc object was passed as a method argument. * Fixed a bug in the spec runner app that could cause the test suite to be started multiple times. Thanks to Jason W. May for the patch (pull request #145). * Improved Range.new performance. 20% faster. * Improved Array#flatten performance. 70% faster. * Improved Time#strftime performance. ~30% faster. * Improved Numeric#{div, to_int} performance. 20-60% faster. * Improved Fixnum#== and Float#== performance when it would compare an object. 2.5-3 times faster. * Improved Enumerable#grep performance. 2 times faster. * Improved the build system to compile as many spec files in parallel as possible. = RubyMotion 2.17 = * Added the `Proc#weak!' method which transforms the strong reference to the block `self' variable into a weak reference. Once the `self' variable is weakly referenced there is no coming back to a strong reference. This method can be used to break cyclic references that the cycle detector is not able to handle yet. * Defined implementations of NSObject methods, such as `conformsToProtocol:', that take Ruby semantics into account on all classes created by RubyMotion. * Fixed a bug in compiler where boxed types would not be properly registered if a structure was only used for a pointer. * Fixed the dispatcher to let methods expecting a structure of type A accept a structure of type B who has the exact same fields signature, as in C (ex. MKCoordinateRegion and CGRect). * Added support for dynamic name directory in project templates. Thanks to Toshiwo for the patch (pull request #144). * Fixed a bug in NSArray#{take,drop} where nil could be returned instead of an empty Array object in certain cases. * Fixed a bug where NSDate objects would be wrongly converted to Time objects. * Fixed a bug where certain structures of the same signatures could not be used. (Ex. NSRect and CGRect in a 64-bit OS X app) * Improved Range.new performance. 20% faster. * Improved Array performance where finalizes object and expands internal memory. 15% faster. * Fixed bugs where ARC's rules related to method names starting with `new` or containing `copy` or `Copy` where not being followed. This lead to objects returned from Objective-C methods that matched these rules not being autoreleased and objects returned from Ruby to Objective-C not being retained. * Fixed the runtime to prefix certain kernel symbols we export (ex. selCopy) in order to avoid clashes at link time with certain 3rd-party libraries. * Fixed a bug in in the build system where duplicated entries in the app.resource_dirs array would mess up the resource-copying process. * Fixed a bug where nested WeakRef objects (WeakRef.new(WeakRef.new(...))) would not be properly resolved at dispatch time. * Fixed a bug in {NSObject,Boxed}#== with a WeakRef object operand where said operand would not be resolved. * Fixed a compiler bug where `not precompiled' errors when it uses structure of GLKit framework. * [iOS] Fix various bugs in the UI test helpers, like `tap`. * [OSX] Fixed #eval to honor the self binding when evaluating the string. * [OSX] Introduced the `app.codesign_for_release' variable, which controls whether code-signing should occur during `rake build:release'. The default value for this variable is `true'. = RubyMotion 2.16 = * Fixed a heap overflow in floating point parsing (CVE-2013-4164). * Improved Time#{<, >, ==, eql?} performance. 9 times faster. * Improved the performance when NSDate objects are converted to Time objects. 10 times faster. * Fixed regression in the REPL that made it impossible to use block local variables. = RubyMotion 2.15 = * Added support for Xcode 5.1 Developer Preview and iOS 7.1 Beta. * Improved REPL to recognize Simulator at any scale and orientation. The only unsupported variant at this time is a Simulator window with scroll bars. * Fixed REPL<->Simulator coordinate translation when run on a Retina Mac. * Fixed undefined behaviour in REPL such as local variables not being stored. * Improved dispatching of shortcut methods (ex foo= is shortcut of setFoo:). 20 times faster. * Improved the performance where Fixnum and Float are returned. 20% faster. * Improved Array#concat performance. About 2 times faster. * Improved Array#reverse performance. 2 times faster. * Improved Array#reverse! performance. 8 times faster. * Improved Array#rotate performance. 5 times faster. * Improved Array#rotate! performance. 40 times faster. * Improved iterators performance (ex Array#{each, map}). 2-3 times faster. * Fixed a bug where Array#rotate! causes a crash in REPL. * Fixed a bug where the objects created by "CFxxxCreate(args)" are not released. * Fixed a bug in dispatcher where #super cannot look up the shortcut method. (ie #foo=) * Improve the precision of Float value. * Raise error if cleaning a build artefact fails. * [iOS] Fixed and optimized remote debugging (`rake device debug=1'). * [iOS] Fixed a bug where `rake device' would no longer print the application logs from the device. * [OSX] Fixed a bug on OSX platform where compiler flags for iOS are passed when it generates bridgesupport file for vendor library. * [OSX] Added missing bridgesupport metadata for Carbon, OSServices and ApplicationServices frameworks. * [iOS] Deprecated optional block that can be passed to the `tests` method when making use of the view test helpers. This can be done with normal `before` filters. = RubyMotion 2.14 = * Really fix the inline function problem described in the previous update. = RubyMotion 2.13 = * Fixed a bug where the methods which are defined as inline functions in iOS/OSX framework are not working properly. * Fixed a bug where using the mouse-over functionality in the REPL would lead to an internal deadlock and hang the process. * Fixed a bug in the REPL where the result of evaluated expressions could be prematurely released before being sent back to the command-line. * [iOS] Work around an issue where Instruments.app wants an integer UIDeviceFamily value and App Launcher wants a string. * [iOS] Fixed a big where the running the REPL in 64-bit mode would result in an error related to the fact that the REPL library was i386-only. = RubyMotion 2.12 = * Added support for OS X Mavericks (10.9). The toolchain is now fully usable on a Mavericks machine and can also be used to create Mavericks OS X apps. * Added `profile' rake tasks that launch builds through Instruments.app for iOS (both simulator and device) and OS X applications. Run a `rake clean' before using the task on an existing project. * [OSX] Added optional support for the #eval method. To enable it, you can set the `app.eval_support' variable to true (default is false). Support is currently experimental and will increase your application bundle size by about 28MB. * Fixed a internal memory leak in the Enumerator object. * Added support to compile the Objective-C source codes which uses Modules syntax in `app.vendor_project'. * Added a custom `gen_bridge_metadata' which enables recursive function pointer parsing to support Objective-C blocks that yield blocks. * Added support for functions/methods that return Objective-C blocks by wrapping those as Proc's. * Fixed a memory leak when ObjC #initXXX methods will return internal class object (ex NSMutableData#initWithLength, NSArray#initWithArray). * Fixed where #new method doesn't work for GLKKit structure. (ex GLKMatrix2.new, GLKVector2.new). * Fixed a bug in Array#sample where it would return duplicated elements when a value greater than self length was passed into argument. * Fixed a bug where `motion update' might cause an error when it displays the changelog on OSX 10.9. * Fixed a compiler bug where it causes a crash with `rake device' when it overrides the method which has structure as argument. * [iOS] Fixed a crash when using certain NSIndexPath objects (64-bit only). * [iOS] Fixed `rake debug=1` on OS X 10.9 not working. * [iOS] Fixed a bug in the build system where it would generate invalid values for the UIDeviceFamily key (was using strings instead of integers). = RubyMotion 2.11 = * Added the `rake clean:all' task which deletes all build object files (ex. those in ~/Library/RubyMotion/build). We recommend using that task before building an App Store submission. * Added support for Xcode asset catalogs. This can be used to manage all your image assets in a visual way, including your application’s icons. You can create and edit a new catalog like so: $ mkdir resources/Images.xcassets && open -a Xcode resources/Image.xcassets * Fixed a long standing limitation in the compiler where overriding in Ruby an Objective-C method that accepts a C-level block was not possible. * Fixed a regression where `return' from a block would terminate the app. * Improve the build system to always copy embedded.mobileprovision. Thanks to Jan Brauer for the patch (pull request #121). * Fixed a bug where a boxed struct would incorrectly be interpreted as a object type, leading to the dispatcher not recognizing a signature. * Fixed a bug where compiled object files of a vendored project were not actually being cleaned when running `rake clean`. * Fixed a bug where defining a singleton method on an object inside a method with named parameters (Objective-C-style selector) would result in that method being defined in the runtime with a wrong selector. * Fixed a bug where Range objects created with non-literal begin/end points would never be released, and therefore leaking memory. * Added `context` method as `describe` alias in spec. Thanks to Ryo Katsuma for the patch (pull request #134). * Fixed a small internal memory leak in the dispatcher when sending the #method_missing message. * Fixed a bug in the compiler where providing nil as the value of a C-level block argument would not actually pass NULL but an empty Block structure instead. Thanks to Ruben Fonseca for the detective work. * [iOS] Fixed a bug where device log is wrong filtered with `rake device' when performed day is 1-9. * [iOS] Added support to launch the app as 64-bit in simulator. * [iOS] Fixed where non-retina iPad simulator does not launch as default. Thanks to Fabio Kuhn for the patch (pull request #133). * [iOS] Fixed a regression where certain GameKit class properties could not be used (ex. GKMatchRequest#minPlayers). * [iOS] Fixed a link error where "ld: framework not found IOKit" is caused with iOS 7 SDK when it will run `rake device'. * [OSX] Fixed the wrong default settings of short cut key in menu. Thanks to Kazuhiro NISHIYAMA for the detective work. = RubyMotion 2.10 = * Fixed a critical regression in the compiler where DWARF metadata would not be generated, causing .dSYM bundles to miss debugging symbols for Ruby code. The regression was introduced in 2.8. If you submitted apps built with 2.8 or 2.9 to Apple and need to symbolicate crash reports, you can rebuild them with 2.10 and use the new .dSYM bundle. * Fixed a bug where `motion changelog' does not work. * Fixed a regression introduced in 2.9 that could lead to a compiler crash when using the GLKit framework. * Fixed a bug in `rake device' where it could sometimes crashes when retrieving console logs. * Fixed a bug in the build system where the build would fail when generating BridgeSupport metadata if the Xcode path contained a space character. Thanks to Michal Jirku for the detective work. * Fixed a warning in the build system when creating a universal static archive for a vendored project. * [iOS] Fixed the build system to really not build for 64-bit by default. * [iOS] Fixed a regression where exceptions could be not rescued in GCD blocks on device, apparently due to an underlying change in iOS 7. Thanks to Mark Frawley for the detective work. * [iOS] Fixed a bug where `rake device' would cause an Assertion Failed when `app.name' contains non-ascii characters. = RubyMotion 2.9 = * Work around what is very likely a bug in the App Store verification process which would reject RubyMotion apps based on the fact that certain __builtin__xxx_chk() functions of the C runtime are marked as private API. These functions are called by the compiler in certain scenarios in order to detect overflows. So far we know Apple rejects __strlcpy_chk() and __strlcat_chk() calls, so we removed them from the RubyMotion runtime. = RubyMotion 2.8 = * Added support for iOS 7.0 GM and Xcode 5.0 GM. * Added support for building 64-bit iOS apps for iPhone 5S (experimental). The toolchain is now able to create x86_64 apps for the simulator and arm64 apps for the device. Given the fact that 64-bit iOS has just been announced and that many 3rd-party projects have not yet been updated, the support is disabled by default. To enable, you can edit your Rakefile and set the following lines: app.archs['iPhoneOS'] << 'arm64'; app.archs['iPhoneSimulator'] << 'x86_64' * Improved the compiler to emit assembly instead of LLVM bitcode, which results in a significant performance improvement (~3x faster builds). * Upgraded the toolchain to LLVM 3.3 and to use clang compilers by default. Xcode 4 (llvm-gcc) is no longer required to exist in the file system. * Fixed a bug in build system where it could not build an app that was using Korean characters in the name. * Fixed a bug in the `motion update' command where a non-ASCII character was wrongly used in the source code, causing the process to fail in certain versions of Ruby. Thanks to Clay Allsopp for the patch (pull request #125). * Fixed the compiler to emit debugging (DWARF) annotations for expressions that weren't covered before (ex. variables assignments). * Fixed a bug where Time#{==, eql?} would return the wrong value when using duplicated object from #copy. * Fixed a bug in the build system in the `app.vendor_project' method where providing custom compiler flags (:cflags => '...') wouldn't work if the project was being built twice (ex. `rake build' which builds for both the simulator and the device). Thanks to Nick Quaranto for finding the bug. * [iOS] Development builds for the device will now compile for the lowest architecture possible, in order to create faster builds. * [iOS] Fixed a malloc error bug when retrieving a NSDate object from the ABRecordCopyValue() function. * [iOS] Fixed a bug where methods of the ABPersonViewController, ABNewPersonViewController and ABUnknownPersonViewController would cause crashes in iOS 7. * [iOS] Fixed a bug where the platform/SDK key in Info.plist would indicate `iphoneos' even for simulator builds. It has now been changed to `iphonesimulator', like Xcode. Thanks to Hwee-Boon Yar for the patch (pull request #129). * Fixed a bug where template working trees would not be updated upon git pull with `motion create [AppName] -template=[git repository path]'. Thanks to Jamon Holmgren for the patch (pull request #128). = RubyMotion 2.7 = * Added support for iOS 7.0 Beta 6 and Xcode 5.0 DP 6. * Bundler is now integrated in new iOS and OS X projects. A default Gemfile will be created and the Rakefile file will require and initialize the bundler gem. In case Bundler is not to be found in the Ruby distribution that is being used, the build system keeps working as usual. * Added the `--cache-version' flag to the `motion update' command which lets you keep multiple versions of RubyMotion in your computer. Cached versions are installed as `/Library/RubyMotion' (where XXX is the version number). A project can use an older version of RubyMotion by changing its Rakefile to point to `/Library/RubyMotion/lib'. The `--force-version' flag previously available in `motion update' has been removed. * Added the `motion device:console' command to print the logs of the USB connected device. New messages will be printed in real-time. Use ^C to disconnect from the device. * Added the `motion changelog' command to open the NEWS file in the terminal. Thanks to Dan Loewenherz for the patch (pull request #107). * Added the `String#to_fourcharcode' method which converts the receiver into a FourCharCode type (used when doing Carbon/AppleEvent programming). The receiver must have exactly 4 characters. * Added `*.gem' into .gitignore in gem template. * Removed calls from the String/Encoding/Regexp classes to ICU functions that Apple has marked as non-public API. As a result, certain operations on UTF-32 encodings are not possible anymore, until we figure out a solution. * Fixed a memory crasher in Range.new. * Fixed a bug in `rake crashlog' where it would fail with a missing Shellwords constant, and also when it was not able to locate any crash report file. * Fixed the wording of the message printed when an application terminates with a non-zero status code. * Fixed a bug in `rake spec' where it would always return exit(0) status. * Fixed the default value of app.short_version to be the same value as in app.version. Thanks to Justin Campbell for the patch (pull request #62). * Improved the `Boxed#to_a' to recursively send the `#to_a' message on fields of the Boxed class (ex: CGRectMake(1, 2, 3, 4).to_a #=> [[1, 2], [3, 4]]). * Improved Time class implementation in order to follow Ruby 1.9, so far it was based on a Ruby 1.8. This would handle a time that exceeds the value of the 32 bit. Added Time#{round, subsec, to_r} methods and changed Time#{new, localtime, getlocal} methods to allow the variable arguments. * Fixed a minor bug in the cycle detector where it would scan the instance variable slots of a pure-Ruby object that have not been initialized yet. * Fixed a memory crasher in the REPL that would happen when attempting to set the libedit prompt from another thread, leading to a race condition. * Fixed a bug, apparently caused by a change in the Objective-C runtime in Xcode 5, that would make certain methods (ex. MKAnnotationView#image) not returning a proper type at runtime but a pointer to a structure instead. * Fixed the build system to make the content of the ARR_CYCLES_DISABLE environment variable persistent when distributing an app. * [iOS] The `rake device' task will now start the application (without the need to attach a debugger). Logs emitted by the app will be redirected in the terminal. ^C quits the app. In order to just install the app, the `install_only' option can be given (ex. `rake device install_only=1'). * [iOS] Fixed the REPL/mouse-over functionality when using the simulator in retina mode (which is the default when targetting iOS 7). * [iOS] Added experimental support for remote debugging with lldb (Xcode 5). * [iOS] Added support for the compilation of SpriteKit texture atlas files. The build system will now compile directories with the `.atlas' extension into one large file inside the app bundle, similar to how Xcode does it. * [iOS] Added `:light_content' as new possible value for the `app.status_bar_style' Rakefile variable. Thanks to Chris Radford for the patch (pull request #116). * [iOS] Fixed a bug in `rake debug=1' with Xcode 5 where builtin commands (ex. `pro') where not available. We ported the commands from gdb to lldb. * [iOS] Fixed a bug where the Accelerate framework was not covered by the compiler. Note that the framework is C-only, might be tough to use from RubyMotion, and should probably be called in vendored-C code for better performance results. * [OSX] Added the `app.category' variable which can be used to specify the AppStore category. The default value is `utilities'. Thanks to Mark Rickert for the patch (pull request #115). * [OSX] Fixed the REPL/mouse-over functionality to be able to select views in the key window, if the application has multiple windows opened. * [OSX] Fixed a bug in Dispatch.once where only the first occurence of the call in the code would work as expected. * [OSX] Added the `app.codesign_for_development' variable that can be set to true to enable codesigning for development builds. The default value for this variable is false, and only release builds are codesigned by default. = RubyMotion 2.6 = * Added support for iOS 7.0 Beta 4 and Xcode 5.0 DP 4. * Improved the build system so that spec files are also compiled in parallel. * Fixed a bug in the cycle detector where it would try scanning objects that have already been released. Thanks to Nick Quaranto for the help. * Fixed a bug in the cycle detector where instance variables on scanned objects would disappear, because of a problem in the WeakRef class. * Fixed a bug in `rake crashlog' with application names containing space characters. Thanks to Clay Allsopp for the patch (pull request #112). * Fixed a bug in the debugger where the debugged process would be terminated if ^C was pressed while the app was running. * Fixed a bug in the spec framework where a spec that raises a pure NSException would cause a runtime error as it would try to send the #backtrace message to the object. * [iOS] Fixed a bug in the REPL (iOS 7 only) where local variables would not be preserved. = RubyMotion 2.5 = * The runtime is now able to detect and break basic circular references (when two objects point to themselves). Only objects created from Ruby classes (including Objective-C subclasses) are scanned. Cycle detection happens when draining the nearest autorelease pool and has a limited number of depth iterations, to preserve acceptable runtime performance. To disable the cycle detector, set the ARR_CYCLES_DISABLE environment variable to any value. To enable debug logging, set the ARR_CYCLES_DEBUG environment variable to any value. Many thanks to Joe Noon for pre-testing this feature. * Fixed a bug where C-level blocks allocated by the compiler would never be released at runtime, as well as the Proc object linked to it. C-level blocks are now allocated on the stack, keep a weak-reference to the Proc object, and properly implement the Blocks ABI copy/dispose handlers to retain/release the associated Proc object when required. * The Exception class is now rewritten on top of the NSException class, and properly implements its primitive methods. Exceptions are no longer being converted. Exception handlers written in Ruby will still catch NSException objects by default. * Fixed memory leaks in NSMutableArray#{first(n), last(n), pop(n), shift(n)}. * Fixed a bug where nested block variables would not be properly synchronized if the block terminated early with the `break' or the `return' construct. Thanks to Greg Fodor for the report. * Fixed a bug where local variables created inside a loop (ex. `while') and used inside a nested block would cause the previous value to be released twice during the next iteration. Thanks to Daniel Dickison for the report. * Fixed Dispatch::*.{sync,async} methods to not catch exceptions inside the given blocks, and simply let the process crash naturally. * Fixed the build system to not compile default exception handlers in the main() entry-point function, as we want the process to crash naturally. * Fixed a bug where block variables passed to Dispatch::Queue#async could be released twice, leading to a crash. * Fixed a bug in the build system where app.deployment_target and app.sdk_version were compared as text. Thanks to Andrew Babichev for the patch (pull request #108). * Changed the `rake simulator' task to print a message when an application crashes due to a signal (ex. SIGSEGV) and suggest the user to read the crash report file that has been generated by the system. * Added the `rake crashlog' task to automatically open the latest crash report file that was generated by the system for the current app. * Fixed a bug in the REPL where using the key to enable auto-completion could result in a crash due to a missing symbol. * Fixed a bug where an object implementing the NSCoding protocol as well as #init and #initialize(arg) methods would cause a crash during creation. * [iOS] Fixed a warning message from the linker that would be displayed when using Xcode 5 to build the app. * [iOS] Fixed a bug in the debugger where built-in debug commands weren't installed within the simulator. * [iOS] Fixed a bug in the build system where an app cmpiled for iOS 5.x would immediately crash on the device. * [iOS] Fixed a bug where the NSUIntegerMax constant was not properly exposed when targeting iOS 7.x. = RubyMotion 2.4 = * Added support for iOS 7.0 Beta 3 and Xcode 5.0 DP 3. * Fixed a long-standing set of memory-related bugs related to lambdas. Dynamic variables (shared by lambdas and calling scope) are now allocated as heap memory inside the Proc data structure. Local variables are properly synchronized. Proc objects are properly reclaimed by the system once they are no longer used. Changes have been added to both the compiler and the runtime. * [iOS] Fixed a bug in `rake device' where it could not build an app using Xcode 5.x with a deployment target less than iOS 7.0. * [iOS] Reduced the size of the Default-568h@2x.png file. Thanks to Gant Laborde for the patch (pull request #100). * [iOS] Fixed a bug where `rake retina=3.5' would not work with Xcode 5.x. * [iOS] Fixed a bug where `rake simulator' would re-launch an iOS 7 simulator with Xcode 5.x every time. * [OSX] Fixed a bug in the build system where APIs of 3rd-party libraries would not be properly handled in 64-bit mode. * Fixed a memory crasher when trying to use the old value of an instance variable slot as a local variable. * Fixed memory leaks in NSMutableArray#insert. * Fixed memory leaks when parsing bridgesupport file during compilation. * Fixed a bug in NSMutableDictionary#delete where it will cause a crash if it would use the result of NSMutableDictionary#delete on the receiver object which was created by NSJSONReadingMutableContainers. * Fixed a bug where 3rd-party libraries would fail to build if the file path of the app contained space characters. * Fixed a bug in Kernel#Array() where it would return an incorrected value if an NSArray object was passed as argument. * Fixed a compiler bug where `not precompiled' errors would sometimes happen at runtime when using APIs dealing with BOOL types. * Added a block to setup controller in the spec API. Thanks to Katsuyoshi Ito for the patch (pull request #104). * Fixed the `rake build' task to honor the `keep_temps' environment variable. If set, temporary files (such as LLVM bitcode and assembly) will not be removed from the build directory. To be used for debugging only. = RubyMotion 2.3 = * Added support for iOS 7.0 Beta 2 and Xcode 5.0 DP 2. * Fixed a bug where the `RUBYMOTION_ENV' constant would not be defined before executing the main scope of .rb application files, resulting in a const lookup error in case the constant was trying to be accessed within a file or module scope. * [iOS] Fixed a bug where `rake simulator' would open 2 simulator apps at the same time, due to the fact that the application name changed between Xcode 4.x and Xcode 5. * [iOS] Fixed a bug where certain NSObject methods would be missing in the Foundation framework compiler file. * [iOS] Fixed a warning message from the linker that would be displayed when building for iOS 7.0. * Fixed a bug in defined?(super) where it would return an incorrect value when used from an included module. * Improve string interpolation performance. 40% faster. * Improve String#delete performance. 5 times faster. * Improve Objective-C methods performance in String object. 50% faster. * Added `output=colorized' in `rake spec'. * Added `skip_build' option to `rake simulator' (iOS) and `rake run' (OSX) to to run the program without recompiling (ex. `rake skip_build=1'). * Added git repository support for templates. (ex. `motion create --template=https://github.com/IconoclastLabs/smart-ios.git test'). Thanks to Gant Laborde and Matt Garrison for the patch (pull request #92). * Fixed a build error that was happening with Xcode 3. Thanks to Matt Garriott for the patch (pull request #97). * Added callback after created controller in spec. Thanks to Katsuyoshi Ito for the patch (pull request #96). * Fixed the build system to set `spec_mode' before running the `setup' block in Rakefile. Thanks to Clay Allsopp for the patch (pull request #84). * Added the `app.exclude_from_detect_dependencies' Rakefile variable. Thanks to Clay Allsopp for the patch (pull request #81). * Fixed a bug in the build system where it would remove `.nib' ressource files even corresponding `.xib' files did not exist. Thanks to Kristian for the patch (pull request #98). * Added back `motion ri' support, which was incidentally removed due to a mistake on the build machine. = RubyMotion 2.2 = * Added iOS 7.0 and OS X 10.9 support. Xcode 5.0 DP must be installed and activated as the default (using `xcode-select'). Xcode 4.x must remain in /Applications/Xcode.app as RubyMotion will still be using it, until we properly migrate to the new compilers. You can revert to Xcode 4.x (using `xcode-select') for stable development. *WARNING* iOS 7.0 and OS X 10.9 are Apple confidental and cannot be discussed online. Do not post code using the new APIs online. = RubyMotion 2.1 = * Improved the `rake simulator' (iOS) and `rake run' (OSX) tasks to honor the `args' environment variable, which can be used to provide command-line arguments that will be passed to the app executable when launching. (ex. rake simulator args="-com.apple.CoreData.SQLDebug 1"). * [iOS] Improved `rake archive' to generate a `manifest.plist' file that can be used for Ad-Hoc distribution. Added the `app.manifest_assets' Rakefile variable which can be set to an array of hashes describing the assets to be included in the file. The default is an empty array, and no file is then generated. (ex. app.manifest_assets << { :kind => 'software-package', :url => 'http://hipbyte.com/foo.ipa' }). * [iOS] Fixed `rake simulator' to show a warning message in case the user is running tmux without `reattach-to-user-namespace', which is necessary. * [iOS] Fixed compilation issues with 6.0 SDK. * [OSX] Fixed a bug in `rake debug=1' where the debugger would not properly start in case the application name includes a space character. * [OSX] Added `rake ctags' task to generate `tags' file. * [OSX] Added `rake static' task to create a static .a archive file. * [OSX] Added `rake build' task as a shortcut for both `build:development' and `build:release'. * [OSX] Fixed `rake archive' to honor the content of the `app.entitlements' project variable when code-signing the binary. * [OSX] Added the `app.embedded_frameworks' Rakefile variable that can include paths to 3rd-party frameworks that should be copied in the app bundle's 'Frameworks' directory (ex. app.embedded_frameworks += ['~/src/MyFramework.framework']). The build system will also fix the install name of the executable. The default value is an empty array. * [OSX] Fixed `rake archive:distribution' to properly codesign the app executable twice, necessary for App Store submissions. * [OSX] Fixed the Info.plist file generation to include the minimum OS requirement key, necessary for App Store submissions. * Fixed a bug in `Dispatch.once' where it would sometimes not yield the block. * Fixed the require statement in the `gem' template Rakefile. Thanks to Devon Blandin for the patch (pull request #88). * Fixed the `iOS' template warning message to print the right library path. Thanks to Tom Milewski for the patch (pull request #86). * Fixed a bug in `app.files_dependencies' where it would not allow a path containing "../" (ex. app.files_dependencies 'foo.rb' => '../bar.rb'). Thanks to Jeremy Ruppel for the patch (pull request #90). * Fixed a bug in `app.vendor_project' to properly set the CONFIGURATION_BUILD_DIR variable for non-standard Xcode projects. Thanks to Jack Chen for the patch (pull request #94). * Fixed `app.vendor_project' with Xcode projects to rebuild the project in case a file changed. Thanks for Jack Chen for the idea and initial work. * Fixed a bug where the .gitignore file would not be generated anymore when creating a new project. * Added the .gitignore file into the `gem' template. * Added the BasicObject#__id__ method for CRuby compatibility. * Fixed a bug in `undef' and Module#remove_method where it would raise an 'undefined method' error if the method was called before being removing. * Fixed a memory bug where an object would be prematurely released if an #initXXX method was called right from within #initialize. * Fixed a bug in #respond_to? where WeakRef objects would not be properly handled. * Fixed a bug in detecting file dependencies where it will not detect file dependencies if the files contain nested constants. = RubyMotion 2.0 = * Added OSX development support. Use `motion create --template=osx' to create an OSX project. Use `rake -T' inside to see the available tasks and `rake config' to see the application config variables. RubyMotion OSX apps are built for both i386 and x86_64 architectures and can support OSX v10.7 and v10.8 as deployment targets. Check out the HipByte/RubyMotionSamples repository on GitHub for sample code and the devcenter for documentation. * Added command-line plugin system, which lets developers extend the `/usr/bin/motion' command-line tool with new commands (ex. `motion foo'). Builtin commands have been extracted as plugins and 3rd-party plugins can be created inside the `~/Library/RubyMotion/command' directory. * Added a RubyMotion gem project template. Use `motion create --template=gem' to create one and check `rake -T' inside to see the available tasks. * Added project templates system (usage: `motion create --template=xxx'). RubyMotion comes with 3 templates: `ios' (default), `osx' and `gem'. 3rd-party project templates can be created inside the `~/Library/RubyMotion/template' directory. * Deprecated `require "motion/project"' in project Rakefiles. Existing iOS projects should now require `motion/project/template/ios' instead. We preserve compatibility for now but please do migrate. * Added the `motion account' command to open the license account page. * Added the `WeakRef' class to create weak references. Usage is `WeakRef.new(obj)' and follows CRuby's WeakRef stdlib class. Passed references will not be retained. Use with caution as sending a message to a WeakRef object whose reference has been prematurely collected will cause a runtime crash. The `WeakRef' class will be replaced by a no-op once the runtime is able to deal with cyclic references. * Improved the detection of file dependencies to handle absolute paths. Thanks to Clay Allsopp for the patch (pull request #82). * Improved the build system by using a separate build directory for source files that resides outside of the project (ex. gems) in order to reduce the compilation time. * Fixed a bug where a crash would happen when calling a method defined using #define_method that was contained in an extended module or in an inherited class that includes a module. * Fixed a bug where a crash would happen when trying to override the `drawMapRect:zoomScale:inContext:' method in a MKOverlayView subclass. * Improve `rake spec' to display an error message if there are no spec files in the `spec' project directory. * Fixed a bug where trying to set a constant inside another constant that is not a Module object would not raise an exception (ex. `A=42; A::B=42'). * Fixed a bug where Module#include? would not be raising an exception if the receiver was not a Module object. * Fixed a bug where `return' on a yielded block that used `ensure' would not work. * Fixed a bug where `catch' and `throw' would not work on an iOS device. * Fixed a bug where a crash would happen when using a variadic method from the Cocos2D framework. * Fixed a bug where a memory leak would happen when creating an object and passing an arbitrary expression to the initializer method. * Fixed a bug in build system where a "stack level too deep" exception could happen. * Fixed a bug when detecting file dependencies where classes or modules defined using the `XXX::YYY' syntax could not be properly parsed. * Fixed a limitation in Struct where creating a struct with more than 10 fields was not possible. We moved the limit to 100 fields. * Fixed a limitation in the dispatcher where dynamically sending a message or yielding a block with more than 10 arguments was not possible. We moved the limit to 100 arguments. * Fixed a bug in the REPL where it would get corrupted when receiving too much input from the evaluator (ex. when using auto-completion). * Fixed a bug where a compilation error would happen when parsing a BridgeSupport structure that included a very large field. * Improved the `motion ri' command to honor the $PAGER environment variable. * Improved the `app.vendor_project' method to honor the :bridgesupport_cflags and :bridgesupport_exceptions options, which will be appropriately passed to the BridgeSupport generator. Thanks to Juan Karam for the patch. * RubyMotion is one year old! Thanks all for your support. |\ _,,,---,,_ /,`.-'`' -. ;-;;,_ |,4- ) )-,_..;\ ( `'-' '---''(_/--' `-'\_) = RubyMotion 1.35 = * Added support for string constants defined in 3rd-party header files using the macro system (ex. #define MyConstant @"SomeValue"). * Added the `no_start' option to `rake device debug=1' to let the user attach a custom debugger. This is for the RubyMine integration. * Fixed a bug in the REPL where the history could not be saved if it included UTF-8 characters. * Fixed a caching bug in Object#respond_to? which could return true for a method that did not exist. * Fixed a bug in REPL where an error message was often printed after using the `quit' or `exit' command. * Fixed a bug where the AVPlayer#currentTime method caused a `{?=qiIq}@:' not precompiled' error. * Improved `rake spec' error messages to include more details. Thanks to Steven Webb for the patch (pull request #68). * Improved `rake spec files=...' to make the `_spec' suffix optional. Thanks to Dave Lee for the patch (pull request #71). * Fixed a bug where using the AudioQueueBuffer structure would cause a crash. * Added the `:force_load' option for the `app.vendor_project' Rakefile method. This flag has a default value of `true' and can be set of `false' when vendoring 3rd-party libraries that include duplicated symbols. * Added the Dir#to_path method for CRuby compatibility. * Fixed a bug where calling #alias on a new method would cause a crash. * Fixed a bug where defining a method with #define_method on a module then messaging the method would cause a crash. * Fixed a bug where 'rake device debug=1' would cause a crash if the project name included UTF-8 characters. * Fixed a bug in the build system where framework dependencies would not properly be loaded. * Fixed a rare bug in the `super' dispatcher. = RubyMotion 1.34 = * Fixed a regression where command + mouse-over would not work in the simulator window. * Fixed a regression in the build system where updated resource files would not be copied. = RubyMotion 1.33 = * Fixed a bug where certain Float object would be losing 2-bits of precision. This was happening because the compiler optimized floats to fit in a 30-bit data structure. The runtime will now allocate 32-bit floats on the heap when they cannot be accurately stored as 30-bit. * Added a feature to support multiple resource directories. Introduced the `app.resources_dirs' variable which defaults to `['./resources']' and can be modified to specify another resource directory to the build system. The previous `app.resources_dir' variable is now deprecated. * Added a feature to automatically create the `Default-568h@2x.png' file in the resources directory during `motion create', in order to support 4-inch screens. * Fixed a bug in the build system where apps whose names include an UTF-8 or UTF8-MAC character would not compile. * Fixed a bug in the simulator mouse-over which could not properly select views if the iOS simulator was rotated. * Fixed a bug where the iOS simulator would not launch on OSX 10.6. * Fixed a bug in `NSDate.alloc.init.timeIntervalSince1970' which would cause a malloc_error_break error. * Fixed memory leaks in NSDate.new and NSDate.alloc.init. * Fixed a bug in Dir.entries and Dir.foreach where an exception was always raised. * Added the NSData#to_s method which is alias for NSData#to_str. * Fixed a bug in Hash#delete where the deleted object would be prematurely released by the table. * Fixed a bug where the iOS simulator would not launch if `app.xcode_dir' pointed to a path other than the '/Applications' folder. * Fixed a bug where the iOS simulator would be relaunched every time with `rake' command. = RubyMotion 1.32 = * Added support for Xcode 4.6 and iOS 6.1 SDK. * Improved Array#hash performance. * Fixed a bug in IO#closed? and File#closed? where an exception wasn't raised if the receiver wasn't initialized. * Fixed a bug in IO#gets where a memory heap overrun would be triggered. * Fixed a bug in IO#close where it would close the wrong stream when opened in both read/write mode by IO#open. = RubyMotion 1.31 = * Fixed a bug in Kernel.sprintf and NSDate.new which would cause a malloc_error_break error. * Added .sass-cache, .idea and app/pixate_code.rb to the default .gitignore file. * Fixed memory leaks in Complex and Rational classes. * Improved String#{[]=, index} performance when a String object has only ASCII code range characters. 5-14 times faster. * Improved String#{==, eql?} performance when the length of the strings do not match. 15 times faster. * Improved String#+ performance by pre-allocating heap memory. * Fixed a bug in MatchData where it caused a crash due to an assertion when used on an uninitialized MatchData object. * Fixex a bug in the automatic dependencies checker where it would cause a build error when `app.files' contained a non-flat Array. * Improved the automatic dependencies checker in the build system to be way faster. Thanks to Yury Korolev for the patch. * Fixed a memory crasher that would happen when symbolicating large exception backtraces (simulator only). Thanks to Doug Puchalski for the help. * Fixed a bug in `rake spec' where an ArgumentError exception would be raised when `it' clauses in spec files would not be defined with a block. * Improved the `tap' format of `rake spec' to print the number of each test instead of the total number, and also a better description. = RubyMotion 1.30 = * Fixed a bug in the build system where it could not detect file dependencies using nested classes (ex. `module M; class C' and `class C2 < M::C'). * Fixed a bug where MapKit annotation pins would disappear, because certain Ruby objects (in this case, MKAnnotations) would use a Bignum value as the return value of the `hash' method, which would not work properly when used within MapKit. * Added formatter for RubyMine tests runner. Thanks to Dennis Ushakov for the patch. * Fixed a bug in Float#hash where (-0.0).hash returned a different value with (0.0).hash. * Fixed a bug in Float#** and Fixnum#** which would return a Complex object when the receiver was a negative value. * Fixed a bug in Float#round which would return an inaccurate value. * Fixed a bug in Numeric#div which would not call the super `floor' method. * Fixed a bug in Range#step where it would return an object of the wrong type when a float value was given as range. * Fixed a bug in Range#{inspect, eql?, ==, hash} where crashes would happen when using cyclic range objects. * Fixed a bug in Range#each where it would not work if the receiver was created using #to_str for the beginning of the range. * Fixed a bug in Range#first(n) where it returned (n + 1) elements. * Added the Object#singleton_class method. * Fixed a bug in String#upto where it did not return an Enumerator object when a block was not given. * Fixed a bug in MatchData#[] where it would return a wrong value when a negative Fixnum object was passed as the index. * Fixed a bug in Regexp#options where it was returning a wrong value. * Fixed a bug in Range#{min, max} where it would not evaluate the block. * Fixed a bug in {File::Stat, Dir, StructClass}.new where it was crashing. * Fixed memory leaks in the following classes: Boxed classes (ex. `CGRect'), Pointer, Range and Time. * Fixed memory leaks where the following methods would return an object that would be leaking: Object#{dup, clone}, Time#{gm, getgm} Time._load, Object#enum_for, NSDictionary#{inspect, dup, to_a, keys, values, value_at, select, reject, merge}, NSMutableDictionary#{delete_if, select!}, NSArray#{dup, inspect, [], select, values_at, +, *}, NSMutableArray#{select!, uniq!}, Pointer.magic_cookie, Boxed#dup. * Fixed memory leaks where some internal data in following classes and methods would be leaking: Bignum, Random, Symbol, File::Stat, StructClass, Dispatch::Queue, Marshal.{dump, load}, Kernel.sprintf, Regexp.{new, quote}, Hash.new, String#{split, count, delete, tr, tr!, tr_s, tr_s!}, Array#hash, Symbol#inspect. = RubyMotion 1.29 = * Fixed a loading error with the ripper library when using Ruby 1.8. * Fixed a bug where the files that only contained constants were not detected by the file dependencies system. * Fixed a bug where cyclic file dependencies would cause a `stack level too deep' error. * Fixed a bug where detecting file dependencies would cause a build error when the list of files would not be given as a flat array. = RubyMotion 1.28 = * Added the `motion ri' command to access to API information on command line. Ex: motion ri Dispatch::Queue#sync * Improved the build system to detect file dependencies automatically. This feature is experimental, if you encounter any problem you can disable it by setting `app.detect_dependencies = false' in the Rakefile. * Fixed the build system to set a 5 seconds timeout when accessing the software updates server. Thanks Nick Quaranto for the patch. * Improved `rake simulator' to honor the SIM_STDOUT_PATH, SIM_STDERR_PATH and SIM_WAIT_FOR_DEBUGGER environment variables, to respectively set the path of the stdout and stderr streams and to tell the simulator launcher that it should wait for a debugger before starting the application. These variables will be used in the RubyMine integration. * Fixed a bug in Dispatch::Object#dispatch_object on iOS versions below 6.0 * Fixed a bug in NSDictionary#select which always raised an exception. * Fixed a bug in String#<< which raised an ArgumentError exception instead of RangeError if the given object was is out of range. * Fixed a bug in Kernel.catch when no argument was given. * Fixed a bug in Kernel.Rational which was not raising a TypeError exception if a Symbol object was passed. * Fixed a bug in Symbol#clone and Sybmol#dup which didn't raised TypeError exceptions. * Fixed a bug in Symbol#match and Symbol#=~ which did not properly return an index of the beginning match. * Fixed a bug in Symbol#succ and Symbol#next which returned a String object. * Added the following methods: Complex#rationalize, ENV#select! and ENV#keep_if. * Fixed a bug in Complex#/ which raised an exception when passed 0.0. * Fixed a bug in Complex.rect and Complex.polar which raised an ArgumentError exception instead of TypeError when a wrong value was given. * Fixed a bug in Regexp.last_match which raised an IndexError exception when an index out of the matched range was given. * Fixed a bug in ENV#[]= which did not raise an Errno::EINVAL exception if the given String object included the '=' character. * Fixed an error message in `rake target' when it cannot find iOS simulator. * Fixed a bug when using TWTweetComposeViewController's methods on iOS 6.0 below would trigger a crash at runtime. = RubyMotion 1.27 = * Fixed a bug where NSDecimalNumber.decimalNumberWithDecimal would not work since 1.24 in development mode, because of a regression introduced after changing the default set of optimization passes. * Fixed a bug where the `dispatch_object' method would not return a proper value on iOS 6.0, because it wasn't conforming to the new os/object.h structure. * Fixed a bug in `rake spec' where certain UIAutomation-based methods would not be callable because of a regression introduced in the previous update. * Fixed a bug in the compiler to compile references to C functions using the weak linkage. If the symbol of a C function is not available at runtime, the function will not be defined and respond_to? will return false. This fixes applications linking against AddressBook.framework on 6.0 and making conditional use of the new ABAddressBookCreateWithOptions(). * Fixed a bug in the runtime where calling `super' in certain methods (ex. UISlider's thumbRectForBounds:trackRect:value:) would crash the program due to an assertion. * Fixed a bug in the compiler where certain structures could be returned as an object of the wrong class (ex. MKCoordinateRegion.region returning AudioValueRange instead of CLLocationCoordinate2D). * Fixed a bug in Object#{dup,clone} where #{initialize_dup,initialize_clone} would not be called. * Fixed a bug in Object#instance_eval where the receiver object was not properly yield to the block. * Fixed a bug in Array#== and Marshal.dump where unnecessary private methods were being looked up. * Fixed a bug in Array#{rotate,rotate!} where it would not raise a TypeError exception if nil was given. * Fixed Array#{uniq, uniq!} and NSArray#{uniq, uniq!} to support blocks. * Fixed a bug in Range#dup where the begin/end values were not copied. * Fixed a bug in Range#step which would not behave like Numeric#step if given a Float argument. * Fixed a bug in String#<< with a codepoint argument where an exception would be raised when called on US-ASCII/BINARY strings. * Added .DS_Store, temporary files and project files into the default .gitignore file. Thanks to Mark Rickert and Eric Summers for the patch. = RubyMotion 1.26 = * Fixed a bug in the build system where the Info.plist file would not be generated with the right DT* values when targetting iOS 6.0. This fixes AppStore submissions for apps made for the iPhone 5 new retina format. * Fixed a bug in the build system when building .bridgesupport files where it would fail to process header paths including space characters. * Fixed a bug where the `rake static' task would not work with iOS 6.0. * Fixed a compiler bug when using the `TWTweetComposeViewController#setInitialText' method on iOS 5.1 or below would trigger a crash at runtime. * Fixed a bug in Pointer#cast! where symbol arguments could not be given to. * Fixed a bug where methods that take variable arguments do not call the appropriate function if an ArgumentError exception if raised. * Fixed a bug where calling super from a #define_method block would fail. * Fixed a bug in the compiler when compiling references to C constants which might already exist in the kernel module (ex. kCFBooleanTrue). * Fixed a bug when starting the simulator with the 'retina=true' option. Thanks to Scott Pierce for the patch. * Fixed the build system to build vendored Xcode projects into the `.build' directory instead of `build', as some projects come with such a directory. * Fixed a memory bug when calling `File.open' with a splat Array argument. * Fixed a regression introduced in 1.21 which prevented the OCMock framework to work, because the dispatcher was performing one additional selector on NSProxy-based receivers and OCMock counts the number of messages. * Fixed a bug in `rake spec' where the simulator launcher would exit with an error status even if the spec suite was successful. * Improved Hash#[]= performance when an Array is used for key to use a MurmurHash function instead of hashing on the length. 400 times faster. * Added the Pointer#value method which is alias for Pointer#[0]. * Added the `app.framework_search_paths' variable that lets you configure the custom framework paths for the project build. * Added the `RUBYMOTION_VERSION' Ruby constant at runtime which points to the version of RubyMotion, as a String. Cleaned up other RUBY_ constants. * Added the `spec:device' Rake task which will run the spec/test suite on the device via the debugger. = RubyMotion 1.25 = * Fixed a bug when using Objective-C properties implemented using message forwarding (ex. GKMatchRequest's maxPlayers). * Fixed a bug in build system where the app.info_plist dictionary would not be re-generated if app.info_plist is called before changing other settings (ex. app.name). * Fixed a bug in the build system where vendored Xcode projects (including projects via CocoaPods) would not be built honoring the Rakefile app.deployment_target variable. * Fixed a bug in the `rake device' debugger task where the debugger would fail to attach if the application name includes a space character. * Fixed a bug in the build system where a project whose path includes a space character would fail to build the second time. * Fixed a bug in the runtime where methods defined with `define_method' that are either aliased or created via a module inclusion would crash when called at runtime. * Fixed a bug in the build system where the `get-task-allow' entitlement which is set to true by default could not be set to false. Thanks to @andreas for the patch. * Fixed a bug in `rake simulator' where a stty-related warning would be printed in case the task is launched from a process where stdout is not a tty. Thanks to Dennis Ushakov for the patch. * Fixed a bug in Range's evaluation order, where the beginning part would not be evaluated at first (ex. (x = 0)..(x + 1)). * Improved the Regexp class to support octal literals and '\[hH]' matchers. * Fixed Math.atan2 to follow the Ruby 1.9.3 specs when both arguments are 0.0. = RubyMotion 1.24 = * Added support for the GM version of the iOS 6 SDK. * Added support for the iPhone5 architecture (armv7s). * Added new values for the `retina' option of `rake simulator': `3.5' (for iPhone4) and `4' (for iPhone5). A `true' value will default to `3.5' in case the simulator target is lesser than 6.0, otherwise, `4' will be used. * Added debugging support (experimental) for both simulator and device. Simply set the `debug' parameter to any value to attach the debugger (ex. `rake debug=1' for simulator and `rake device debug=1' for device). The Ruby code compiles with relevant DWARF metadata and the debugger used is gdb. Note that the debugger experience is a work in progress and will be significantly improved in future releases. Check out http://www.rubymotion.com/developer-center/articles/debugging * Fixed the `development' mode to not compile with LLVM optimizations. This results in faster compilation times and also better debugging support, but the code might run a bit slower. The `release' mode builds with the entire optimization passes. * Added to the build system the `mode' option which can be used to specify the build mode, either `development' (default) or `release'. You can now test your app in release mode by using `rake mode=release' for simulator and `rake device mode=release' for device. * Fixed the build system not to execute the user-defined application setup block twice, which is no longer necessary with the new `mode' option. * Removed the `archive:development' and `archive:release' tasks which are no longer necessary with the new `mode' option. * Added the `archive:distribution' task which builds an .ipa with distribution settings (certificate, default entitlements, symbols stripped). * Fixed `rake spec' to produce an .app bundle that uses a different bundle identifier than the regular app. This is necessary in Xcode 4.5 to avoid simulator installation issues. * Fixed a bug in the simulator launcher when output to stdout would not be displayed in case the rake process was piped to another process (ex. `rake spec | ...'). * Added the Dispatch.once method, which wraps the dispatch_once() function, that can be useful to implement singletons. Usage: Dispatch.once { ... }. * Added support for `define_method'. Like `attr_*', it cannot be used to overwrite existing Objective-C methods due to limitations of the compiler. * Fixed a bug when converting Bignum objects into 'long long' types. * Fixed a bug in the build system where relative source paths pointing to the parent directory would not properly be expanded and would trigger build failures. * Fixed several bugs in String#% related to arguments and precision format. * Improved String#[]= performance. 50 times faster. * Improved String#length performance with multibyte characters. If String includes multibyte characters, its length will be cached and reused. 500 times faster. * Improved String#reverse performance with ASCII-compatible string. 30 times faster. * Improved Fixnum/Float modulo performance. 2 times faster. * Fixed memory leaks in String#{reverse, reverse!} * Fixed a bug when calling a method on an uninitialized Regexp object. (ex. Regexp.allocate.to_s). * Fixed a bug when calling NSArray#flatten(level) with 0. * Fixed bugs in NSArray#rindex, NSArray#values_at, NSArray#values_at, NSDictionary#values_at and Kernel.#sprintf which could raise uncatchable exceptions. * Fixed a bug in Dispatch::Source.timer which couldn't handle the Dispatch::TIME_FOREVER constant for interval. * Fixed a bug in NSArray#delete_if where nil could not be returned if the receiver did not change. * Added the following methods: NSArray#rotate, NSMutableArray#rotate!, NSMutableArray#sort_by!, NSMutableArray#select!, NSMutableArray#keep_if, NSMutableDictionary#select!, NSMutableDictionary#keep_if. = RubyMotion 1.23 = * Fixed a bug where conformsToProtocol: would not return true on objects implemented in Ruby for protocols using required/optional sections (ex. AQGridView). * Fixed a bug in the compiler metadata file for the CMSampleBufferRef type which would prevent methods accepting this type to be called. * Fixed a bug in the runtime where certain classes (ex. Random) would create instances released twice, triggering malloc errors later on. Thanks to Hugues Lismonde for the detective work. * Changed `rake device' to honor the `id' environment variable that can be used to specify the ID of the device where the app should be installed. This is useful when you have several iOS devices connected on your machine and don't want `rake device' to deploy to the first one. * Fixed a bug in String#strip where certain multibyte characters would be considered as whitespace. Thanks to Watson for the patch. * Fixed vendor_project (:static) to create static libraries with an object- file index, which is mandatory as of Mountain Lion. * Fixed the build system to support nested directories containing xib and storyboard files. Patch by Mike Kelley. * Fixed a bug in the `tap' method of the `spec/ui' library to properly handle the `at' option. Patch by Clay Allsopp and Marc Schwieterman. * Added the RuntimeError#nsexception method which, in case the exception comes from an Objective-C method, contains the original NSException object. This can be useful when you need to access specific NSException-level information (such as the `userInfo' dictionary). * Fixed a bug where the REPL methods (ex. `sessions') were added on the Kernel module, making them available to all objects. This was causing collisions (ex. when creating a CoreData `Session' entity). * Fixed the build system to pass -fobjc-arc to the linker in case the app is built for the 4.3 deployment target. This is necessary so that the ARC runtime is properly linked into the app, when vendoring 3rd-party projects that are ARC-only (ex. SVPullToRefresh). Patch by Satoshi Ebisawa. * Fixed the build system to no longer re-build all .rb files in case the project's Rakefile changed. = RubyMotion 1.22 = * This release adds support for iOS 4.3 and 5.0 back which wasn't present in 1.21 due to a bug in the build system. Sorry folks! = RubyMotion 1.21 = * Fixed a regression in the BridgeSupport generator in Mountain Lion where APIs dealing with CFTypeRef would accept or return Pointer objects instead of genuine objects. * Fixed a bug where C structures starting with a lower-case character could potentially be registered more than once in the runtime, leading to weird memory issues (ex. many cocos2d structures). * Fixed a bug where certain bignums (ex. ALAssetsGroupAll) could not be passed as `unsigned int' arguments. * Fixed a bug in `rake static' where the static archives would not be created with an object-file index, which is now mandatory in Mountain Lion. * Fixed a bug in the runtime where Objective-C properties implemented using message forwarding could not be called (ex. GKPlayer's alias or playerID). = RubyMotion 1.20 = * Fixed a bug in the runtime where apps compiled for iOS5 calling into APIs using certain C typedefs would raise an exception in iOS6 because of an ABI incompatibility (introduced by clang's new enumerator_attributes extension). * Fixed a bug in the runtime where an exception would occur when Objective-C code would try to allocate a new instance of a class defined in Ruby using the +new method (ex. RestKit). * Fixed a memory bug in Hash.[] when a Hash was passed (ex. Hash[a:'a']). * Fixed a bug in certain Dispatch APIs when the main Dispatch::Queue object was passed causing an ArgumentError exception. * Fixed a bug in #public_send where an exception would not be raised if the method is marked private. * Fixed a bug when preparing blocks for libdispatch where dynamic variables could be prematurely collected. * Fixed a bug when certain methods implemented using message forwarding would not be properly precompiled and would be raising an exception at runtime (ex. UITextInputTraits enablesReturnKeyAutomatically). * Removed a dyld warning that was printed on stderr when generating the backtrace of an exception (dyld: DYLD_ environment variables being ignored because...). Mountain Lion only. * Fixed the runtime to be able to use Objective-C classes whose names start with a lower-case character by capitalizing the name, similar to how C constants and enumerations are mapped. (Ex. ICarrousel.new for the iCarrousel class). * The iOS 6.0 version of the runtime has been recompiled for iOS 6.0 Beta 3. = RubyMotion 1.19 = * Fixed a compiler bug (segfault) that could happen when compiling files using C opaque types. = RubyMotion 1.18 = * Fixed a problem introduced in 1.16 that was causing objects returned from certain initializers to be autoreleased twice. * Added the `motiondir' project variable that can be used to specify the path of the RubyMotion distribution (defaults to /Library/RubyMotion/lib). Patch by Marc Schwieterman. * Added support to test Storyboards in the testing layer. Patch by Marc Schwieterman. * Added the `--force-version=X' argument to `motion update' which can be used to downgrade to a specific version of RubyMotion. This can be useful to reduce bugs. Ex: motion update --force-version=1.15 * Fixed the iOS 6.0 Rakefile to use Xcode 4.5 DP2 by default. = RubyMotion 1.17 = * Removed the Bundler support as it's apparently causing issues on certain environments. It will be added back once we figure out the edge cases. = RubyMotion 1.16 = * Fixed a compiler bug in the way certain opaque types in the CoreMIDI framework would not properly be handled, causing crashes at runtime. * Fixed a regression in the build system where spec files in nested directories would not be taken into account. Patch by Marc Schwieterman. * Bundler is now optionally required by the build system. If you use bundler, you do not need to require it in the project's Rakefile anymore. Patch by Vladimir Pouzanov. * Disabled exception logging when running in spec mode. * Fixed a bunch of memory leaks due to a bug in the compiler that was not properly autoreleasing objects returned from overloaded initializers. Thanks to Satoshi Ebisawa for the detective work. * Fixed a memory bug in Array that was happening when re-allocating the storage after a #shift call. * Fixed a compiler bug where C or Objective-C APIs returning 32-bit integers whose values cannot fix in 30-bits would not be properly converted into Bignum types. * Fixed a bug in the simulator launcher where iPad projects could be started in the iPad simulator but using an iPhone simulator frame. * The iOS 6.0 version of the runtime has been recompiled for iOS 6.0 Beta 2. = RubyMotion 1.15 = * Improved the spec framework to leverage UIAutomation's functionality. This lets you write functional tests on views and controllers by using the same event generators, but in pure Ruby (and not Javascript). Check http://www.rubymotion.com/developer-center/articles/testing for more information about the new API. Feature contributed by Eloy Duran. * Introduced spec helpers. `rake spec' will now honor the files inside the `spec/helpers' directory (if it exists) and compile them before the spec files. * Introduced the `files' option to `rake spec', which can be used to filter the spec files that should be run. Filters can be either the basename of a spec file or its full path, and are separated by a comma. Example: rake spec files=main_spec,kvo_spec,spec/foo_spec.rb * Introduced the RUBYMOTION_ENV constant in the runtime which can have one of the following string values: 'test', 'development' and 'release'. * Introduced the `rake static' task which creates a universal static library containing the project's object files and the RubyMotion runtime, which is suitable for inclusion in Objective-C/Xcode projects. * Introduced weak frameworks support. The `app.weak_frameworks' setting can be set to an array of framework names, similar to how `app.frameworks' works (ex. app.weak_frameworks += ['Twitter']). Patch by Satoshi Ebisawa. * Fixed a bug in the build system where files within symlinks inside of the resources directory would not be copied. Patch by Nick Quaranto. = RubyMotion 1.14 = * Fixed a bug in the Struct class where certain instances would be released twice and triggering a malloc error. * Fixed a bug where aliasing a method generated by attr_* would trigger an assertion at runtime when being called. * Fixed a bug where calling methods generated by attr_* from Objective-C would return NSNull instead of nil in case the attribute is nil. * Fixed a bug in the random number generator where the generator would not be properly initialized in certain cases (ex. Array#sample), therefore always returning the same values. * Fixed a bug where using C structures containing bitfields (ex. NSDecimal) would trigger an exception at compilation time. * Added support for pointers to C strings (needed for glShaderSource()). Usage: Pointer.new(:string, n) where n is the number of C strings, then simply assign Ruby strings with #[]=. * Changed the runtime to log all raised exceptions via NSLog(). This behavior can be controlled via the Exception.log_exceptions variable (which is true by default, but can be set to false). * Introduced new project variables: short_version, background_modes and status_bar_style. Patch by Francis Chong. = RubyMotion 1.13 = * Fixed a regression in `rake simulator' introduced by the last update. Also, the environment variable used to set the SDK target is renamed to `target' (ex. rake target=4.3). * Fixed a bug in the build system where certain .rb files would be rebuilt every time `rake build' was executed, because the object directory was not touched. * Fixed a bug in the build system where the RUBYOPT variable would not be cleared when calling the gen_bridge_metadata tool, which would cause some issues later on. Patch by Satoshi Ebisawa. = RubyMotion 1.12 = * Fixed a bug where sending an `init' message alone (without using `alloc' before) would lead to a memory crash. This was possible when overloading an initWith* method and doing `self.init' inside. * Fixed a bug where performing Objective-C methods that accept CFType objects would crash the program (ex. [ABPersonViewController setDisplayedPerson:]). * Switched to clang++ to link the executable bits. This fixes linker crashes on iOS 6.0. * Added `fast' output for `rake spec'. Fixed a bug in the other outputs. Patch by Marin Usalj. * Improved the build system to let the user specify CPU archs that should be used for a certain platform. The `app.archs' method returns a Hash that one can tweak. This is so far only useful when you target 4.3 (which is armv6 and armv7) and want to link with a 3rd-party library that only supports armv7 (ex. app.archs['iPhoneOS'] = ['armv7']). * Improved `rake simulator' to honor the `deployment_target' environment variable (ex. rake deployment_target=4.3). Patch by Satoshi Ebisawa. * Fixed a bug in the build system where the compiler would not use the right BridgeSupport files when using a lower deployment_target. Patch by Satoshi Ebisawa. * Fixed the build system to re-link the .app executable in case one of the vendored libraries changed. * Fixed bugs in both ARM/simulator compilers where structures smaller than 64 bits would not be following the ABI and causing unexpected behavior in certain cases (ex. cocos2d). Thanks to Aaron Hurley for the detective work. * Removed Kernel#select as it clashes with a private `select' method defined by iOS and triggered when hitting the select button in a paste action. Thanks to Francis Chong for the detective work. = RubyMotion 1.11 = * Fixed a bug where the runtime would not allow `nil' to be passed as a C-level block argument. * Fixed a bug where methods defined by attr_* would abort the program when called by Objective-C. * Improved `rake spec' to honor the `output' environment variable, which can be used to select a different output format. Available formats: spec_dox, test_unit, tap and knock (ex. rake spec output=test_unit). * Support for the iOS 6.0 Beta 1 SDK can be generated after having installed Xcode 4.5 by typing the following command: $ cd /Library/RubyMotion/data/6.0; rake update = RubyMotion 1.10 = * Fixed the build system to validate the content of the `app.icons' variable, since a wrong value may trigger an "unrecognized selector" exception in Application Loader when trying to submit the app to the App Store. * Fixed the Rakefile created by `motion create' to include the magic utf8 comment, as the file may contain multibyte characters and be parsed by Ruby 1.9. Patch by @pchw. * Fixed a memory bug when using symbols as Hash keys. * Exposed iOS 4.3 (or greater) libdispatch APIs. * The following NSString methods that used to raise a "does not work on NSStrings" exception are no longer defined: byte_size, get_byte, set_byte, force_encoding, valid_encoding?, ascii_only?, bytes, each_byte, to_data, pointer. This allows the developer to use respond_to?. These methods however are available on strings created in Ruby. * Fixed a bug in `rake simulator' where the value of `deployment_target' would be used as the SDK version, causing a `system_root != nil' assertion in some cases. * Fixed the compilation of empty symbols (:''). * Fixed the generation of .bridgesupport files on Snow Leopard by not passing the '--no-64-bit' flag (which was added in Lion). * Fixed `motion create' to accept dash or underscore characters in the app name. Patch by Mark Villacampa. * Added a workaround for an iOS 5.1 bug that causes write(2) to return EBADF when writing to stdout. The bug seems to happen on devices not configured for development. Writing to stdout (using p/puts) in this scenario becomes a no-op. * Fixed the simulator launcher to properly propagate exit(2) status codes from the simulated app. This fixes `rake spec' to properly exit with 1 in case one or more specs failed to run. * Fixed the RUBY_ENGINE constant to be 'rubymotion' (was 'macruby' before). * Objective-C objects conforming to the NSFastEnumeration protocol can now be iterated using the #each method. The method is created on demand on these objects. * Fixed a bug in the simulator REPL where hitting the Home button would trigger an insane CPU usage. = RubyMotion 1.9 = * Fixed a bug in the build system where the paths of vendored libraries would not be properly quoted and cause a build failure in case they contain space characters. * Fixed a bug in the build system where using a lower deployment_target version would cause a link error at runtime because the application was linking against a framework that does not exist (ex. CoreImage on 4.3). * Fixed the `rake spec' task to not move the simulator window to the foreground. * Fixed a bug in the compiler where APIs accepting pointers to CoreFoundation types could not be given Pointer objects of the :object type (ex. CFErrorRef*). * Added support for CoreAudio (experimental). At the very least, constants pointing to four-bytes characters should be properly covered. * Fixed a typo in "expected array of %d elements, got %d" exception message where the numbers were inverted. Thanks Enrico Thierbach. * Fixed a bug in the compiler where compiling strings containing only null characters (ex. "\x00") would cause a crash. = RubyMotion 1.8 = * Fixed a bug in the generation of BridgeSupport files for multiple headers directories. * When building vendored projects, unset environment variables that could potentially make the build to fail. https://github.com/HipByte/motion-cocoapods/issues/12 = RubyMotion 1.7 = * Fixed a bug in the compiler where the proper signature would not be used when defining informal protocol methods with CF types as arguments. * Fixed iOS constants to be looked up at demand (when being used) and not when the app starts, because certain constants are not set until a certain API is called (ex: the kAB... constants of the AddressBook framework). This change should also speed up a little bit the app starting time. * Fixed a bug in the compiler where very long selectors would be truncated and causing exceptions later at runtime. * Fixed a bug in the compiler where memory-related selectors (alloc, dealloc, retain, release, etc.) could not be defined in Ruby. * Fixed a bug in the compiler where NSObject instance methods could not be called on classes (ex. MyClass.performSelector(...)). * Fixed a bug in the build system where vendored 3rd-party APIs dealing with types defined in iOS headers could not be used (ex: enums or structs). = RubyMotion 1.6 = * Fixed a regression in the build system introduced by the previous update (when compiling .xib files). * Fixed the vendoring system to include all source code files. Merged patch from https://groups.google.com/d/msg/rubymotion/tPCxSMCA2f4/w2DIHFo2AVAJ * Fixed the REPL to not crash if you give it an empty expression. = RubyMotion 1.5 = * Improved the REPL to support multi-line expressions. * Fixed a bug when compiling Core Data model files where the `momc' utility was not given absolute paths. * Removed legacy MacRuby code that was using the private `isaForAutonotifying' selector and causing a warning during an App Store submission. * Fixed a bug in Enumerable#sort_by that would lead to a crash. * Fixed a bug in the REPL where it would not detect the iOS Simulator window if certain windows were in front or created later. * Fixed a bug in the build system where framework dependencies would not be properly handled. * Added support for .lproj directories (i18n). Thanks Aaron Hurley. * Fixed a bug where objects from pure Ruby classes sent to KVO would not be properly handled later (because KVO inserts a new singleton class). * Fixed attr_writer to emit KVO notifications (will/didChangeValueForKey). = RubyMotion 1.4 = * Added support for the compilation of .xcdatamodeld and .storyboard resource files. Thanks Ian Phillips, Andrew Vega and Michail Pishchagin. * Fixed a bug when the build system would fail in case the resources dir does not exist. Thanks Watson. * Fixed a bug in the Xcode project vendoring code when header files at different directory levels would not be properly handled. This also fixes the motion-cocoapods gem. Thanks Eloy Duran. * Added a way to start the simulator in retina mode by setting the `retina' environment variable to `true' (other values will be considered false). For example: `rake retina=true'. Thanks Marcin Maciukiewicz for the idea. * Fixed an ABI bug in the way we compile Ruby methods overloading Objective-C methods returning small C structures that can fit in a 64-bit integer. Thanks Kristoph Cichocki-Romanov for the report. * Added support for the iOS 4.3 SDK. = RubyMotion 1.3 = * Fixed a bug in format strings with width / precision modifiers. * Disabled the automatic loading of motion- gems. * Added support for the compilation of Interface Builder resource files. .xib files present in the `resources' directory will be compiled to .nib files then copied in the app bundle. .nib files are added to the default .gitignore and removed during `rake clean'. Thanks Ian Phillips. * Improved the `rake device' error message to mention that Wi-Fi sync might cause device deployments to fail. * Fixed a bug in NSArray#reject where the new array would not be returned. = RubyMotion 1.2 = * Fixed a couple bugs in the project vendoring code that would be triggered when using the motion-cocoapods gem. The fixes were merged from the https://github.com/HipByte/motion-cocoapods/issues/1 discussion. * Fixed codesign bugs in `rake archive:release'. * Improved the Xcode detection code by printing a warning message in case the user installed a recent Xcode in /Applications that has not been set as the default Xcode in the system yet. * Fixed a typo in the REPL help message (thanks Mike Clark). = RubyMotion 1.1 = * Fixed `rake device' to print a human-readable error message in case the deployment might fail because another process is connected to the device. * Fixed a bug in `rake simulator' where view detection would not work on non-English desktops (error "Cannot locate the Simulator app"). Make sure to exit the Simulator app after applying this update. = RubyMotion 1.0 = * First release.