unity info.plistplist 怎么打开

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)
Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)
围观36992次
编辑日期: 字体:
Unity打IOS时会先生成一个Xcode工程,如果你需要增加一些第三方的framework那么需要手动一条一条的添加,这太烦了。。而且可能你还需要修改Plist文件,甚至还可能要修改unity自动生成的oc代码,每次打包都要修改的话,那太累了。。这篇文章就是全自动打包的第一步。。建议使用,我在它的基础上拓展了两个类,一个用来修改plist,一个用来修改unity生成出来的OC代码。文章的最后我会给出代码。。
那么我用一个比较变态的SDK举个例子ShareSDK,它就需要自动添加framework,修改plist,还有要修改oc的代码。第一步打开XUPorter/Mods/share.projmods 文件。
1234567891011121314151617181920212223242526
{&&&&"group": "share",&&&&"libs": ["libicucore.dylib","libz.1.2.5.dylib"],&&&&"frameworks": [&&&&&&&&&&&&&&&&&&&&"SystemConfiguration.framework",&&&&
"QuartzCore.framework",&&&&
"CoreTelephony.framework",&&&&
"Security.framework",&&&&&&&&&&&&&&&&&&&&"AdSupport.framework:optional",&&&&&&&&&&&&&&&&&&&&"MessageUI.framework",&&&&&&&&&&&&&&&&&&&& "StoreKit.framework",&&&&&&&&&&&&&&&&&&&& "AudioToolbox.framework",&&&&&&&&&&&&&&&&&&&& "QuartzCore.framework"&&&&
&& ],&&&&"headerpaths": [],&&&&"files":&& [&&&&&&&&&&&&&&&&"ShareSDK/Connection/SinaWeiboConnection.framework",&&&&&&&&&&&&&&&&"ShareSDK/Connection/WeChatConnection.framework",&&&&&&&&&&&&&&&&"ShareSDK/Core/AGCommon.framework",&&&&&&&&&&&&&&&&"ShareSDK/Core/ShareSDKCoreService.framework",&&&&&&&&&&&&&&&&"ShareSDK/ShareSDK.framework"&&&&&&&&&&&&&&&&],&&&&"folders": ["ShareSDK/"],&&&&&&&&"excludes": ["^.*.meta$", "^.*.mdown$", "^.*.pdf$"],&&&&"linker_flags": []}
frameworks分成两种,一种是系统自带的framework还有一种是第三方的framework。 “frameworks”节点里面放的是系统自带的frameworks。”files”节点里面放的是第三方做出来的framework。 尤其是第三方的framework如果位置放的不对,就不会被xcode所引用的!切记切记!!
folders:可以把某个文件夹下的所有文件拷贝在xcode工程里面,一般sdk都会附带一些oc的代码文件,最好通过folders把oc的代码拷贝在工程里面。或者你也可以把oc的代码放在plugins下面,同样打包的时候也会拷贝进xcode工程。
unity打完IOS或者Android包以后会自动回调一个静态方法。
&&&&[PostProcessBuild (100)]&&&&public static void OnPostProcessBuild (BuildTarget target, string pathToBuiltProject)
自动添加framework的原理其实就是等包打完以后,在这个方法里面进行文件的操作,把需要的framework plist oc 代码拷贝进去,或者修改它们。。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
using UnityEngine;&#if UNITY_EDITORusing UnityEditor;using UnityEditor.Callbacks;using UnityEditor.XCodeEditor;using System.Xml;#endifusing System.IO;&public static class XCodePostProcess{&&&&#if UNITY_EDITOR&&&&[PostProcessBuild (100)]&&&&public static void OnPostProcessBuild (BuildTarget target, string pathToBuiltProject)&&&&{&&&&&&&&if (target != BuildTarget.iPhone) {&&&&&&&&&&&&Debug.LogWarning ("Target is not iPhone. XCodePostProcess will not run");&&&&&&&&&&&&return;&&&&&&&&}&&&&&&&&&//得到xcode工程的路径&&&&&&&&string path = Path.GetFullPath (pathToBuiltProject);&&&&&&&&&// Create a new project object from build target&&&&&&&&XCProject project = new XCProject (pathToBuiltProject);&&&&&&&&&// Find and run through all projmods files to patch the project.&&&&&&&&// Please pay attention that ALL projmods files in your project folder will be excuted!&&&&&&&&//在这里面把frameworks添加在你的xcode工程里面&&&&&&&&string[] files = Directory.GetFiles (Application.dataPath, "*.projmods", SearchOption.AllDirectories);&&&&&&&&foreach (string file in files) {&&&&&&&&&&&&project.ApplyMod (file);&&&&&&&&}&&&&&&&&&//增加一个编译标记。。没有的话sharesdk会报错。。&&&&&&&&project.AddOtherLinkerFlags("-licucore");&&&&&&&&&//设置签名的证书, 第二个参数 你可以设置成你的证书
project.overwriteBuildSetting ("CODE_SIGN_IDENTITY", "xxxxxx", "Release");&&&&&&&&project.overwriteBuildSetting ("CODE_SIGN_IDENTITY", "xxxxxx", "Debug");&&&&&&&&&// 编辑plist 文件&&&&&&&&EditorPlist(path);&&&&&&&&&//编辑代码文件&&&&&&&&EditorCode(path);&&&&&&&&&// Finally save the xcode project&&&&&&&&project.Save ();&&&&&}&&&&&private static void EditorPlist(string filePath)&&&&{&&&&&&&&&XCPlist list =new XCPlist(filePath);&&&&&&&&string bundle = "com.yusong.momo";&&&&&&&&&string PlistAdd = @"&&&&&&&&&&&&&&&key&CFBundleURLTypes&/key&&&&&&&&&&&&&&array&&&&&&&&&&&&&&dict&&&&&&&&&&&&&&key&CFBundleTypeRole&/key&&&&&&&&&&&&&&string&Editor&/string&&&&&&&&&&&&&&key&CFBundleURLIconFile&/key&&&&&&&&&&&&&&string&Icon@2x&/string&&&&&&&&&&&&&&key&CFBundleURLName&/key&&&&&&&&&&&&&&string&"+bundle+@"&/string&&&&&&&&&&&&&&key&CFBundleURLSchemes&/key&&&&&&&&&&&&&&array&&&&&&&&&&&&&&string&ww123456&/string&&&&&&&&&&&&&&/array&&&&&&&&&&&&&&/dict&&&&&&&&&&&&&&/array&";&&&&&&&&&//在plist里面增加一行&&&&&&&&list.AddKey(PlistAdd);&&&&&&&&//在plist里面替换一行&&&&&&&&list.ReplaceKey("&string&com.yusong.${PRODUCT_NAME}&/string&","&string&"+bundle+"&/string&");&&&&&&&&//保存&&&&&&&&list.Save();&&&&&}&&&&&private static void EditorCode(string filePath)&&&&{
//读取UnityAppController.mm文件&&&&&&&&XClass UnityAppController = new XClass(filePath + "/Classes/UnityAppController.mm");&&&&&&&&&//在指定代码后面增加一行代码&&&&&&&&UnityAppController.WriteBelow("#include \"PluginBase/AppDelegateListener.h\"","#import &ShareSDK/ShareSDK.h&");&&&&&&&&&//在指定代码中替换一行&&&&&&&&UnityAppController.Replace("return YES;","return [ShareSDK handleOpenURL:url sourceApplication:sourceApplication annotation:annotation wxDelegate:nil];");&&&&&&&&&//在指定代码后面增加一行&&&&&&&&UnityAppController.WriteBelow("UnityCleanup();\n}","- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url\r{\r&&&&return [ShareSDK handleOpenURL:url wxDelegate:nil];\r}");&&&&&}&&&&&#endif}
在回到ShareSDK上,在接微信平台的时候,它们需要在pList 里面增加URL types选项,这里我通过XCPlist增加一行 或者替换一行。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;&namespace UnityEditor.XCodeEditor{&&&&public partial class XCPlist : System.IDisposable&&&&{&
private string filePath;
List&string& contents = new List&string&();
public XCPlist(string fPath)
{&&&&&&&&&&&&filePath = Path.Combine( fPath, "info.plist" );&&&&&&&&&&&&if( !System.IO.File.Exists( filePath ) ) {&&&&&&&&&&&&&&&&Debug.LogError( filePath +"路径下文件不存在" );
&&&&return;
}&&&&&&&&&&&&&FileInfo projectFileInfo = new FileInfo( filePath );
StreamReader sr = projectFileInfo.OpenText();
while (sr.Peek() &= 0)
contents.Add(sr.ReadLine());
sr.Close();&
public void AddKey(string key)
if(contents.Count & 2)
contents.Insert(contents.Count - 2,key);&
public void ReplaceKey(string key,string replace){
for(int i = 0;i & contents.Count;i++){
if(contents[i].IndexOf(key) != -1){
contents[i] = contents[i].Replace(key,replace);
public void Save()
{&&&&&&&&&&&&StreamWriter saveFile = File.CreateText(filePath);
foreach(string line in contents)
saveFile.WriteLine(line);
saveFile.Close();&&&& }&
public void Dispose()
ShareSDK在接入微信平台的时候 必须修改Unity生成的UnityAppController.mm 文件,这里我通过 XClass 自动修改UnityAppController.mm生成的代码。 主要是增加代码和替换代码 两部分。。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;&namespace UnityEditor.XCodeEditor{ public partial class XClass : System.IDisposable {&&&&&&&&&private string filePath;&
public XClass(string fPath)
{&&&&&&&&&&&&filePath = fPath;
if( !System.IO.File.Exists( filePath ) ) {
Debug.LogError( filePath +"路径下文件不存在" );
}&&&&&&&&&public void WriteBelow(string below, string text)&&&&&&&&{&&&&&&&&&&&&StreamReader streamReader = new StreamReader(filePath);&&&&&&&&&&&&string text_all = streamReader.ReadToEnd();&&&&&&&&&&&&streamReader.Close();&&&&&&&&&&&&&int beginIndex = text_all.IndexOf(below);&&&&&&&&&&&&if(beginIndex == -1){&&&&&&&&&&&&&&&&Debug.LogError(filePath +"中没有找到标致"+below);&&&&&&&&&&&&&&&&return; &&&&&&&&&&&&}&&&&&&&&&&&&&int endIndex = text_all.LastIndexOf("\n", beginIndex + below.Length);&&&&&&&&&&&&&text_all = text_all.Substring(0, endIndex) + "\n"+text+"\n" + text_all.Substring(endIndex);&&&&&&&&&&&&&StreamWriter streamWriter = new StreamWriter(filePath);&&&&&&&&&&&&streamWriter.Write(text_all);&&&&&&&&&&&&streamWriter.Close();&&&&&&&&}&&&&&&&&&public void Replace(string below, string newText)&&&&&&&&{&&&&&&&&&&&&StreamReader streamReader = new StreamReader(filePath);&&&&&&&&&&&&string text_all = streamReader.ReadToEnd();&&&&&&&&&&&&streamReader.Close();&&&&&&&&&&&&&int beginIndex = text_all.IndexOf(below);&&&&&&&&&&&&if(beginIndex == -1){&&&&&&&&&&&&&&&&Debug.LogError(filePath +"中没有找到标致"+below);&&&&&&&&&&&&&&&&return; &&&&&&&&&&&&}&&&&&&&&&&&&&text_all =&&text_all.Replace(below,newText);&&&&&&&&&&&&StreamWriter streamWriter = new StreamWriter(filePath);&&&&&&&&&&&&streamWriter.Write(text_all);&&&&&&&&&&&&streamWriter.Close();&&&&&&&&&}&&&&&&&&&public void Dispose()&&&&&&&&{&&&&&&&&&} }}
像这样,我就可以把unity生成的代码修改了。。
最后是工程地址:
建议大家把工程下载下来看看一基本上就明白它的工作原理了。如果你掌握者本篇文章的知识 那么恭喜你 自动化打包就已经完成了一半。。 现在我们已经可以自动化生成 xcode工程了,等有时间的话我会把下一半shell 自动化打包.ipa的方法在整理出来。。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!ma_haile 的BLOG
用户名:ma_haile
文章数:38
评论数:25
访问量:600156
注册日期:
阅读量:5863
阅读量:12276
阅读量:399186
阅读量:1089330
51CTO推荐博文
本篇将向你介绍 iOS 应用开发中的 Xcode 工具的菜单功能
开发工具Xcode介绍
自从Xcode 3.1 发布以后,Xcode就成为了iPhone软件开发工具包的开发环境。Xcode可以开发Mac OS
X和iOS应用程序,并且Xcode的版本是与SDK相对应的。例如:Xcode 3.2.5与iOS SDK 4.2对应,Xcode 4.1与iOS
SDK 4.3对应,Xcode 4.2与iOS SDK 5对应,Xcode 4.3与iOS SDK 5.1对应。
Xcode 4.1之前还有一个配套使用的工具Interface
Builder,它是Xcode套件的一部分,用来设计窗体和视图,通过它可以&所见即所得&地拖曳控件、定义事件等,其数据以XML的形式存储 在.xib文件中。在Xcode 4.1之后,Interface Builder成为了Xcode的一部分,与Xcode集成在一起。
1:打开 Xcode(默认位置在&/应用程序&目录下)。
如果你从未使用 Xcode 创建或打开过工程,你将看到和图中类似的 Xcode 欢迎界面
右侧的空白界面为 最近打开过的项目,第一次使用xcode 是空白的喔 。
2:我们点击左侧 Create a new Xcode project 选项 创建一个新的项目(或者可以进入工具后 通过 菜单栏 File -》New-》Project 打开此界面)
Xcode 将开启一个新窗口并显示对话框,让你选择一个模板。Xcode 内置了几套应用模板,可以方便开发常规 iOS 应用。例如,Tabbed
模板能够创建一个和表格的应用,而 Master-Detail 模板能够创建和 Mail 相似的应用。
在此界面下 左侧为 系统类型 ios 为苹果手机系统, mac os x 为max 系统应用
右侧为应用的各种模板,可以根据模板创建不同的样式风格的应用
&3: 我们点击 左侧的ios 下面的 applicaiton& 然后选择 右侧的 singleView application 模板 点击next 进入下一步
4:在接下了的对话框中会让你输入应用的名称,以及关于工程的一些额外信息。
Product Name(产品名称)
Company Identifier(公司标识 既包名)
Class Prefix(类前缀)
你可以按下面的内容填写:
Product Name:HelloWorld
Company Identifier:com.haile
Class Prefix:HelloWorld
Device Family : 选择设备类型
Use Storyboards: 使用故事板 此选项比较难理解,我们后续会讲解
Use Automatic Reference Counting:& 使用arc 计数器 即自动内存管理
Include unit Tests: 引用 unit 测试工具
注意:Xcode 会使用你输入的产品名称为工程以及应用程序命名。Xcode 会使用你提供的类前缀名称来命名它为你创建的类。例如,Xcode 会自动创建一个应用委托类并将其命名为&HelloWorldAppDelegate。如果你填写了其他的类前缀,那么应用委托就会被命名为 你的前缀名称AppDelegate。(之后你会了解更多关于应用委托的内容。)
5:填写工程名称,等信息 device Family 等信息
请确认 Use Storyboards 和 Use Automatic Reference Counting ,Include Unit Tests 选项不被选中。
点按 Next.
6: 选择一个保存位置(不要选中 Source Control 选项)(保存在文稿目录下是不错的选择喔),然后点按 Create 完成创建。
Xcode 便会打开一个新工程窗口(我们叫它工作区窗口),看上去应该和下图类似:
现在熟悉一下 Xcode 为你打开的工作区窗口吧。在接下来的教程里,你会经常用到图中不同的区域和按钮。
下面我们来一一介绍 工具栏中的 功能菜单
view Buttons 区域的 3个按钮 如图:
他们的功能(从左到右)分别为:打开导航栏区域, 打开日志区域,打开实用工具区域
各位童鞋 可以根据情况和场景 去打开和关闭不同的区域喔
editor Buttons 区域的 3个按钮 如图:
他们的功能(从左到右)分别为:显示的标准编辑器,显示的助理编辑器,显示的文本编辑器
这几个button 各位童鞋有个概念即可,后续在开发中我们会一一讲解其具体作用
导航栏区域中的 导航列 如图
上图中 红色框框中 从左到右 依次的功能项为:
1:显示项目浏览器 (默认为此项)
2:显示符号导航
3:显示搜索导航
4:显示问题导航 如果你的代码中有格式或语法错误,会在此导航下面显示
5:显示调试导航& 显示调试相关信息
6:显示断点导航&& 此导航 显示的为 你代码中 设置断点的位置
7:显示日志导航
上图中横向按钮为 实用工具中的 功能按钮 从左到右 依次的功能项为:
1:显示文件检查器
2:显示帮助检查器
3:显示身份检查器(用于查看和修改某对象的身份,查看它属于那个控制器,或对象)
4:显示属性检查器 (用户查看和修改某对象的属性)
5:显示大小 (用户查看和修改某控件对象的大小和位置关系)
6:显示连接检查器 (用于检查和修改控件和控制类之间的关系)
如何在 iOS 模拟器中运行你的应用&
首先确认一下 Xcode 工具条里的 Scheme 菜单选中了&HelloWorld & iPhone 5.0 Simulator。
如果该菜单显示的不是这一项,那么点开它并选择 iPhone 5.1 Simulator。 如图:
点按 Xcode 工具条中的 Run 按钮(或点选 Product & Run)。
Xcode 会在工具条中央的活动查看器里实时显示构建过程。
当 Xcode 完成构建过程之后,模拟器就会自动运行(可能要等几秒模拟器才会出现在工作区窗口上方)。因为你已经选择过 iPhone(而不是
iPad),所以模拟器会显示一个和 iPhone 一样的界面。在虚拟的 iPhone 屏幕上,模拟器会自动运行你的应用,看上去应该是这样的:
现在,你的应用里什么也没有:它仅仅显示一个空白屏。要了解这个白屏来自哪里的话,你需要学习代码里的对象,并且学习它们如何协同工作启动这个应用。现在, 请退出模拟器(点选&iOS Simulator & Quit iOS Simulator。请注意不要退出 Xcode)。
下一章 我们 来创建第一个 经典程序 ,输出helloword 并了解 一个应用是如何运行起来的本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 unity 使用plist png 的文章

 

随机推荐