This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
| #import <UIKit/UIKit.h> | |
| @interface UIView (SMFrameAdditions) | |
| @property (nonatomic, assign) CGPoint $origin; | |
| @property (nonatomic, assign) CGSize $size; | |
| @property (nonatomic, assign) CGFloat $x, $y, $width, $height; // normal rect properties | |
| @property (nonatomic, assign) CGFloat $left, $top, $right, $bottom; // these will stretch the rect | |
| @end |
| expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) ) |
| // use for patterns: | |
| // *gmail.com* | |
| // *mail.google.com* | |
| // *google.com*mail* | |
| window.fluid.dockBadge = ''; | |
| setTimeout(updateDockBadge, 3000); | |
| setInterval(updateDockBadge, 15000); | |
| function updateDockBadge() { |
| CGRect CGRectIntegralScaledEx(CGRect rect, CGFloat scale) | |
| { | |
| return CGRectMake(floorf(rect.origin.x * scale) / scale, floorf(rect.origin.y * scale) / scale, ceilf(rect.size.width * scale) / scale, ceilf(rect.size.height * scale) / scale); | |
| } | |
| CGRect CGRectIntegralScaled(CGRect rect) | |
| { | |
| return CGRectIntegralScaledEx(rect, [[UIScreen mainScreen] scale]); | |
| } |
| // Taken from the commercial iOS PDF framework http://pspdfkit.com. | |
| // Copyright (c) 2014 Peter Steinberger, PSPDFKit GmbH. All rights reserved. | |
| // Licensed under MIT (http://opensource.org/licenses/MIT) | |
| // | |
| // You should only use this in debug builds. It doesn't use private API, but I wouldn't ship it. | |
| // PLEASE DUPE rdar://27192338 (https://openradar.appspot.com/27192338) if you would like to see this in UIKit. | |
| #import <objc/runtime.h> | |
| #import <objc/message.h> |
| function _hero_getRemoteNames(){ | |
| git config --get-regexp remote.*.url heroku.com | | |
| sed -E 's/^remote\.([^\.]*)\.url .*$/\1/' | |
| } | |
| function _hero_herokuAppFor(){ | |
| git config --get remote.$1.url | | |
| sed -E 's/^[email protected]:([^.]*)\.git/\1/' | |
| } |
| /* | |
| * Calling math.h functions like `floor` and `floorf` on CGFloat variables | |
| * becomes problematic when compiling the same code for both 32-bit and | |
| * 64-bit platforms, since CGFloat is double on 64-bit, float on 32-bit. | |
| * Hence, if you compile with -Wconversion set, `floorf` will give a warning | |
| * on 64-bit, while `floor` gives a warning on 32-bit. | |
| * | |
| * Here's a suggested implementation of an architecture-independent `floor` | |
| * function, written using plain old function overloading which is enabled | |
| * using the `__attribute__((overloadable))` Clang language extension. |
| /** | |
| Provides the ability to verify key paths at compile time. | |
| If "keyPath" does not exist, a compile-time error will be generated. | |
| Example: | |
| // Verifies "isFinished" exists on "operation". | |
| NSString *key = SQKeyPath(operation, isFinished); | |
| // Verifies "isFinished" exists on self. |
| #ifndef NS_DESIGNATED_INITIALIZER | |
| #if __has_attribute(objc_designated_initializer) | |
| #define NS_DESIGNATED_INITIALIZER __attribute((objc_designated_initializer)) | |
| #else | |
| #define NS_DESIGNATED_INITIALIZER | |
| #endif | |
| #endif |