赞
踩
1、XUPorter用起来很厉害的样子!!
对于修改Xcode代码的问题参考了MOMO大神的代码:http://www.xuanyusong.com/archives/2720。
扩展类:
- <span style="font-size:14px;">using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using Junfine.Debuger;
-
- namespace UnityEditor.XCodeEditor
- {
- public class XClass
- {
- string classPath;
- public XClass(string classPath)
- {
- this.classPath = classPath;
- }
- public void Process(ArrayList classes)
- {
- foreach (object o in classes)
- {
- Hashtable table = o as Hashtable;
- ArrayList arrr = table["replace"] as ArrayList;
- ArrayList arra = table["append"] as ArrayList;
- if(arrr!=null&&arrr.Count>0)
- {
- XCodeClass xcc=new XCodeClass(classPath+table["name"]);
- xcc.Replace(arrr[0].ToString(),arrr[1].ToString(),arrr[2].ToString());
- }
- if(arra!=null&&arra.Count>0)
- {
- XCodeClass xcc=new XCodeClass(classPath+table["name"]);
- xcc.WriteLine(arra[0].ToString(),arra[1].ToString());
- }
- }
- }
- }
- public class XCodeClass
- {
- string path;
- public XCodeClass(string path)
- {
- this.path = path;
- Debuger.Log ("Class path:" + path);
- }
- public void WriteLine(string last,string append)
- {
- if (!File.Exists (path))
- {
- Debuger.Log("未找到类文件:"+path);
- return;
- }
- StreamReader streamReader = new StreamReader(path);
- string text_all = streamReader.ReadToEnd();
- streamReader.Close();
-
- int beginIndex = text_all.IndexOf(last);
- if(beginIndex == -1)
- {
- Debug.LogError(path +"中没有找到标致"+last);
- return;
- }
-
- int endIndex = text_all.LastIndexOf("\n", beginIndex + last.Length);
-
- text_all = text_all.Substring(0, endIndex) + "\n"+append+"\n" + text_all.Substring(endIndex);
-
- StreamWriter streamWriter = new StreamWriter(path);
- streamWriter.Write(text_all);
- streamWriter.Close();
- }
- public void Replace(string oldStr,string newStr,string method="")
- {
- if (!File.Exists (path))
- {
- Debuger.Log("未找到类文件:"+path);
- return;
- }
- bool getMethod = false;
- string[] codes = File.ReadAllLines (path);
- for (int i=0; i<codes.Length; i++)
- {
- string str=codes[i].ToString();
- if(string.IsNullOrEmpty(method))
- {
- if(str.Contains(oldStr))codes.SetValue(newStr,i);
- }
- else
- {
- if(!getMethod)
- {
- getMethod=str.Contains(method);
- }
- if(!getMethod)continue;
- if(str.Contains(oldStr))
- {
- codes.SetValue(newStr,i);
- break;
- }
- }
- }
- File.WriteAllLines (path, codes);
- }
- }
- }</span><span style="font-size:18px;">
- </span>
2、自己定义的JSON:XCExtention.projmods。
<span style="font-size:14px;">{
"group": "XCExtention",
"libs": ["libz.dylib","libsqlite3.0.dylib"],
"frameworks": ["StoreKit.framework"],
"headerpaths": ["iOS/"],
"files": [],
"folders": ["Editor/XUPorter/Mods/iOS/"],
"linker_flags": [],
"compiler_flags": [],
"plist":{"CFBundleIdentifier":"com.xx.xx.xx","urltype":[{"name":"weixin","schemes":["xxxxxxxxxxxxxxxx"]}]},
"excludes": ["^.*.meta$", "^.*.mdown$", "^.*.pdf$","^.*.DS_Store"],
"class":[{"name":"main.mm","replace":["const char* AppControllerClassName = \"UnityAppController\";","const char* Ap<span style="white-space:pre"> </span>pControllerClassName = \"UnityAppController_Custom\";",""],"apend":[]}]
}</span>
3、重写了UnityAppController.h文件:
- <span style="font-size:14px;">//
- // UnityAppController_Custom.h
- // Unity-iPhone
- //
- // Created by niko on 15-7-10.
- //
- //
- #import "WeiXin/WXApi.h"
-
- #define WeiXinID @"wx..............."
- #define WeiXinSecret @"5ace7e016a14e913478cdc4219ace9e7"
- #define ksendAuthRequestNotification @"ksendAuthRequestNotification"
- #define GameObjectName "AndriodClass"
- #define MethodName "Weixincallback_LoginSuccess"
- #define ShareMethod "Weixincallback_shareSuccess"
-
- #import "UnityAppController.h"
-
- @interface UnityAppController_Custom:UnityAppController
-
- @end</span>
4、接着重写UnityAppController.m文件(主要实现了微信的登录和分享功能):
- <span style="font-size:14px;">//
- // UnityAppController_Custom.m
- // Unity-iPhone
- //
- // Created by niko on 15-7-10.
- //
- //
-
- #import <Foundation/Foundation.h>
- #import "UnityAppController_Custom.h"
-
- #if defined (__cplusplus)
- extern "C"
- {
- #endif
- bool isWXAppInstalled()
- {
- return [WXApi isWXAppInstalled];
- }
- bool isWXAppSupportApi()
- {
- return [WXApi isWXAppSupportApi];
- }
- // 给Unity3d调用的方法
- void weixinLoginByIos()
- {
- // 登录
- [[NSNotificationCenter defaultCenter] postNotificationName:ksendAuthRequestNotification object:nil];
- }
- void ShareByIos(const char* title,const char*desc,const char*url)
- {
- NSString *titleStr=[NSString stringWithUTF8String:title];
- NSString *descStr=[NSString stringWithUTF8String:desc];//0416aa28b5d2ed1f3199083b3806c6bl
- NSString *urlStr=[NSString stringWithUTF8String:url];
- NSLog(@"ShareByIos titleStr:%@",titleStr);
- NSLog(@"ShareByIos descStr:%@",descStr);
- NSLog(@"ShareByIos urlStr:%@",urlStr);
-
- NSDictionary *dic=[[NSBundle mainBundle] infoDictionary];
- NSLog(@"dic:%@",dic);
- NSArray *arr=[[[dic valueForKey:@"CFBundleIcons"] valueForKey:@"CFBundlePrimaryIcon"]valueForKey:@"CFBundleIconFiles"];
- NSLog(@"arr:%@",arr);
- NSString *iconName=arr[0];
- NSLog(@"iconName:%@",iconName);
- // 分享
- WXMediaMessage *message = [WXMediaMessage message];
- message.title = titleStr;//@"专访张小龙:产品之上的世界观";
- message.description = descStr;//@"微信的平台化发展方向是否真的会让这个原本简洁的产品变得臃肿?在国际化发展方向上,微信面临的问题真的是文化差异壁垒吗?腾讯高级副总裁、微信产品负责人张小龙给出了自己的回复。";
- [message setThumbImage:[UIImage imageNamed:iconName]];
- // [message setThumbImage:[UIImage imageNamed:@"AppIcon72x72"]];
-
- WXWebpageObject *ext = [WXWebpageObject object];
- ext.webpageUrl = urlStr;//@"http://tech.qq.com/zt2012/tmtdecode/252.htm";
-
- message.mediaObject = ext;
- message.mediaTagName = @"WECHAT_TAG_SHARE";
-
- SendMessageToWXReq* req = [[[SendMessageToWXReq alloc] init]autorelease];
- req.bText = NO;
- req.message = message;
- req.scene = WXSceneTimeline;
- [WXApi sendReq:req];
- }
- #if defined (__cplusplus)
- }
- #endif
-
- @implementation UnityAppController_Custom
-
- -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendAuthRequest) name:ksendAuthRequestNotification object:nil]; // 微信
- //向微信注册
- [WXApi registerApp:WeiXinID];
- return [super application:application didFinishLaunchingWithOptions:launchOptions];
- }
- -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- [super application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
- return [WXApi handleOpenURL:url delegate:self];
- }
- #pragma mark - WXApiDelegate
-
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- {
- return [WXApi handleOpenURL:url delegate:self];
- }
-
- - (void)onReq:(BaseReq *)req // 微信向第三方程序发起请求,要求第三方程序响应
- {
-
- }
-
- - (void)onResp:(BaseResp *)resp // 第三方程序向微信发送了sendReq的请求,那么onResp会被回调
- {
- if([resp isKindOfClass:[SendAuthResp class]]) // 登录授权
- {
- SendAuthResp *temp = (SendAuthResp*)resp;
- if(temp.code!=nil)UnitySendMessage(GameObjectName, MethodName, [temp.code cStringUsingEncoding:NSUTF8StringEncoding]);
-
- // [self getAccessToken:temp.code];
- }
- else if([resp isKindOfClass:[SendMessageToWXResp class]])
- {
- // 分享
- if(resp.errCode==0)
- {
- NSString *code = [NSString stringWithFormat:@"%d",resp.errCode]; // 0是成功 -2是取消
- NSLog(@"SendMessageToWXResp:%@",code);
- UnitySendMessage(GameObjectName, ShareMethod, [code cStringUsingEncoding:NSUTF8StringEncoding]);
- }
- }
- }
- #pragma mark - Private
-
- - (void)sendAuthRequest
-
- {
-
- SendAuthReq* req = [[[SendAuthReq alloc] init] autorelease];
-
- req.scope = @"snsapi_userinfo";
-
- req.state = @"only123";
-
-
-
- [WXApi sendAuthReq:req viewController:_rootController delegate:self];
-
- }
-
-
-
- - (void)getAccessToken:(NSString *)code
-
- {
-
- NSString *path = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",WeiXinID,WeiXinSecret,code];
-
- NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
-
- NSOperationQueue *queue = [[NSOperationQueue alloc] init];
-
- [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
-
- ^(NSURLResponse *response,NSData *data,NSError *connectionError)
-
- {
-
- if (connectionError != NULL)
-
- {
-
-
-
- }
-
- else
-
- {
-
- if (data != NULL)
-
- {
-
- NSError *jsonParseError;
-
- NSDictionary *responseData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonParseError];
-
- NSLog(@"#####responseData = %@",responseData);
-
- if (jsonParseError != NULL)
-
- {
-
- // NSLog(@"#####responseData = %@",jsonParseError);
-
- }
-
- NSString *accessToken = [responseData valueForKey:@"access_token"];
-
- NSString *openid = [responseData valueForKey:@"openid"];
-
- [self getUserInfo:accessToken withOpenID:openid];
-
- }
-
- }
-
- }];
-
- }
-
-
-
- - (void)getUserInfo:(NSString *)accessToken withOpenID: (NSString *)openid
-
- {
-
- NSString *path = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",accessToken,openid];
-
- NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
-
- NSOperationQueue *queue = [[NSOperationQueue alloc] init];
-
- [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
-
- ^(NSURLResponse *response,NSData *data,NSError *connectionError) {
-
- if (connectionError != NULL) {
-
-
-
- } else {
-
- if (data != NULL) {
-
- NSError *jsonError;
-
- NSString *responseData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
-
- NSLog(@"#####responseData = %@",responseData);
-
- NSString *jsonData = [NSString stringWithFormat:@"%@",responseData];
-
- UnitySendMessage(GameObjectName, MethodName, [jsonData cStringUsingEncoding:NSUTF8StringEncoding]);
-
- if (jsonError != NULL) {
-
- // NSLog(@"#####responseData = %@",jsonError);
-
- }
-
- }
-
- }
-
- }];
-
- }
-
- #pragma mark -
-
- @end</span>
4、这里是Unity里面得目录:
5、然后到XCode目录就成这样啦:
6、最后剩下一个问题:怎么实现自动添加AppIcon?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。