Skip to content

Instantly share code, notes, and snippets.

View lxcid's full-sized avatar

Stan Chang Khin Boon lxcid

View GitHub Profile
@lxcid
lxcid / latest_receipt-base64-decoded.plist
Created December 2, 2012 07:29
Responses from verifying receipts with Apple's receipt validation server
{
"signature" = "AkYuPMDg5n9y40Q/jWOO/UNJyFAo3cO+oRjIZIKYt7/M05EyXqJNHJGPQnmda4Zy0BqGsz1m2fpSJQatT03V/b0TfAr4+p8bofURjCLY9NX36LCgWDjwS1SxRao+4ek72q53MeGVSkGoy5E27jSz5P2fQds8PvwPid3Dx3O594/wAAADVzCCA1MwggI7oAMCAQICCGUUkU3ZWAS1MA0GCSqGSIb3DQEBBQUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAwwqQXBwbGUgaVR1bmVzIFN0b3JlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA5MDYxNTIyMDU1NloXDTE0MDYxNDIyMDU1NlowZDEjMCEGA1UEAwwaUHVyY2hhc2VSZWNlaXB0Q2VydGlmaWNhdGUxGzAZBgNVBAsMEkFwcGxlIGlUdW5lcyBTdG9yZTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMrRjF2ct4IrSdiTChaI0g8pwv/cmHs8p/RwV/rt/91XKVhNl4XIBimKjQQNfgHsDs6yju++DrKJE7uKsphMddKYfFE5rGXsAdBEjBwRIxexTevx3HLEFGAt1moKx509dhxtiIdDgJv2YaVs49B0uJvNdy6SMqNNLHsDLzDS9oZHAgMBAAGjcjBwMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUNh3o4p2C0gEYtTJrDtdDC5FYQzowDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSpg4PyGUjFPhJXCBTMzaN+mV8k9TAQBgoqhkiG92NkBgUBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAEaSbPjtmN4C/IB3QEpK32RxacCDXdV
@lxcid
lxcid / purchase-info.txt
Created December 1, 2012 05:26
Comparing decoded `purchase-info` from `SKPaymentTransaction` to `receipt` from Apple's receipt validation response.
# The decoded `purchase-info` from `SKPaymentTransaction`:
{
bid = "com.example.app";
bvrs = 7;
"item-id" = 580191698;
"original-purchase-date" = "2012-11-27 15:26:42 Etc/GMT";
"original-purchase-date-ms" = 1354030002000;
"original-purchase-date-pst" = "2012-11-27 07:26:42 America/Los_Angeles";
"original-transaction-id" = 1000000059318468;
@lxcid
lxcid / ProxyView.m
Created June 26, 2012 15:16
Hacking view... like a noob...
#import "ProxyView.h"
@implementation ProxyView
@synthesize targetView = _targetView;
- (UIView *)hitTest:(CGPoint)thePoint withEvent:(UIEvent *)theEvent {
return [self.targetView hitTest:thePoint withEvent:theEvent];
}
@lxcid
lxcid / Patch01.m
Created June 20, 2012 06:56
IRGeoInterceptor patch.
- (IRGeoInterceptor *)interceptorWithDelegate:(id<MKMapViewDelegate>)theDelegate {
if (_interceptor == nil) {
_interceptor = [[IRGeoInterceptor alloc] init];
_interceptor.middleMan = self;
_interceptor.receiver = theDelegate;
[super setDelegate:(id<MKMapViewDelegate>)_interceptor];
}
return _interceptor;
@lxcid
lxcid / gist:2586763
Last active October 4, 2015 05:38
Call resume() to stop the block from exercising the run loop and break out of the loop/block. Failure to call resume() will cause the test to hang indefinitely. This is useful to testing asynchronous actions like AFNetworking operations. See https://gist.github.com/2215212 With some reference from https://github.com/icanzilb/MTTestSemaphore, I w…
typedef void (^LXSResumeBlock)(void);
typedef void (^LXSRunLoopBlock)(LXSResumeBlock resume);
// Call resume() to stop the block from exercising the run loop and break out of the loop/block.
// Failure to call resume() will cause the test to hang indefinitely.
// This is useful to testing asynchronous actions like AFNetworking operations. See https://gist.github.com/2215212
// With some reference from https://github.com/icanzilb/MTTestSemaphore, I was able to simplify this method.
inline void LXS_exercisesRunLoopInBlock(LXSRunLoopBlock block) {
__block BOOL keepRunning = YES;
block(^{ keepRunning = NO; });
while (keepRunning && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.03]]) {
@lxcid
lxcid / LXOperatingHours.h
Created January 17, 2012 02:02
LXOperatingHours
#import <Foundation/Foundation.h>
enum {
LXMonday = 1 << 0,
LXTuesday = 1 << 1,
LXWednesday = 1 << 2,
LXThursday = 1 << 3,
LXFriday = 1 << 4,
LXSaturday = 1 << 5,
LXSunday = 1 << 6,