Step into the exciting world of farming with Farming Simulator 20! Harvest many different crops, tend to your livestock of pigs, cows, and sheep, and now ride your own horses, letting you explore the vast land around your farm in a brand-new way. Sell your products in a dynamic market to earn money which you can invest in additional machinery and the expansion of your farm.
In Farming Simulator 20 you take control of over 100 vehicles and tools faithfully recreated from leading brands in the industry. For the first time on mobile platforms this includes John Deere, the largest agriculture machinery company in the world. Drive other famous farming brands such as Case IH, New Holland, Challenger, Fendt, Massey Ferguson, Valtra, Krone, Deutz-Fahr and many more.
下载链接:
https://www.iphonecake.com/app_1478611992_.html
关键代码:
// fs18iapDylib.m
// fs18iapDylib
//
// Created by obaby on 2017/8/24.
// Copyright (c) 2017年 obaby. All rights reserved.
//
#import "fs18iapDylib.h"
#import "CaptainHook.h"
#import
#import
#import "CydiaSubstrate.h"
#import
#import "BABYStringEncoding.h"
static __attribute__((constructor)) void entry(){
NSLog(@"\n 🎉!!!congratulations!!!🎉\n👍----------------insert dylib success----------------👍");
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
CYListenServer(6666);
}];
}
/*
CHDeclareClass(CustomViewController)
CHOptimizedMethod(0, self, NSString*, CustomViewController,getMyName){
//get origin value
NSString* originName = CHSuper(0, CustomViewController, getMyName);
NSLog(@"origin name is:%@",originName);
//get property
NSString* password = CHIvar(self,_password,__strong NSString*);
NSLog(@"password is %@",password);
//change the value
return @"AloneMonkey";
}
*/
CHDeclareClass(IOSInAppPurchase)
CHMethod2(void, IOSInAppPurchase, paymentQueue, id, que, updatedTransactions, id, trans){
for(SKPaymentTransaction *tran in trans){
NSLog(@"payment result:%ld",(long)tran.transactionState);
switch (tran.transactionState) {
case SKPaymentTransactionStatePurchased:
{
NSLog(@"payment result:交易完成");
}
break;
case SKPaymentTransactionStatePurchasing: //
{
NSLog(@"payment result:商品添加进列表");
}
break;
case SKPaymentTransactionStateRestored:
{
NSLog(@"payment result:已经购买过商品");
}
break;
case SKPaymentTransactionStateFailed: //2
{
NSLog(@"payment result:交易失败");
//SKPaymentTransaction * newTrans = [[SKPaymentTransaction alloc] init];
//newTrans.transactionState = 1;
//memset((uintptr_t)newTrans.transactionState, 0x1, 1);
//memset(newTrans.transactionState, 0x1, 1);
[tran setValue:[NSNumber numberWithInt:1] forKey:NSStringFromSelector(@selector(transactionState))];
NSLog(@"payment result:buy changed");
NSLog(@"payment2 result:%ld",(long)tran.transactionState);
}
break;
default:
{
}
break;
}
}
CHSuper(2,IOSInAppPurchase, paymentQueue, que, updatedTransactions, trans);
}
NSInteger _logos_method$_ungrouped$SKPaymentTransaction$transactionState();
NSInteger _logos_method$_ungrouped$SKPaymentTransaction$transactionState()
{
return 1LL;
}
NSInteger (*__logos_orig$_ungrouped$SKPaymentTransaction$transactionState)();
CHConstructor{
//CHLoadLateClass(IOSInAppPurchase);
//CHClassHook(0, CustomViewController, getMyName);
//CHClassHook2(IOSInAppPurchase, paymentQueue, updatedTransactions);
id hookedClass = objc_getClass("SKPaymentTransaction");
if (hookedClass){
MSHookMessageEx(hookedClass, @selector(transactionState), _logos_method$_ungrouped$SKPaymentTransaction$transactionState, &__logos_orig$_ungrouped$SKPaymentTransaction$transactionState);
NSLog(@"congratulations!! hook success");
}
NSLog(@"congratulations!! hook finished");
}
github链接:
https://github.com/obaby/fs18-iap-crack
github链接:
https://github.com/obaby/fs18-iap-crack