创建没有nib文件的App

本文针对Cocoa Touch,Cocoa可能略有区别

首先说为什么不用Nib,其实也没什么太令人信服理由,大概就是以下几点吧

  • 代码重用比较方便
  • 用Interface Builder多多少少有丢三落四的毛病
  • 感觉自己写出来的代码更有存在感一些
  • 没事闲的

至于性能上是否有区别我还不太清楚,查了一会儿也没什么结果,如果各位对这方面有了解还请回复一下.

进入正题,以下几步搞定MainWindow

  • 删除Info.plist里面Main nib file base name这一条,或者把后面的MainWindow清空也行
  • main.m里有一句
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    改成:
    int retVal = UIApplicationMain(argc, argv, nil, @"YOUR_APPDELEGATE_CLASS");
    如:
    int retVal = UIApplicationMain(argc, argv, nil, @"TestAppDelegate");
  • XXXAppDelegate.m里面,删除原来的一些内容,添加类似如下代码,这里就不细说了,相信都能明白
    – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //一定要initWithFrame,否则不响应触摸事件
        _mainTabBarController = [[MainTabBarController alloc] init];
        _window.rootViewController = _mainTabBarController;
        [_window makeKeyAndVisible];
        
        return YES;
    }
MainWindow搞定了,其他ViewController就比较简单了,可以重写init,也可以在viewDidLoad等方法里添加一些控件.创建ViewController就直接alloc init就行,不用管frame的问题.
 
没有了nib是不是感觉整个项目清爽了一些呢?不过要写的代码也变多了.
 
–以上–

解决因删除xib(nib)文件所导致的错误

用XCode编写程序,如果你由于各种原因需要删除一个xib文件,在删除文件后就可能遇到一些稀奇古怪的问题,首先说下解决方法

尝试做以下工作:

  • 粗暴地删除真机/模拟器上对应的App (这个一般就能解决问题了)(注意看后文,有更温和的解决方法)
  • 对整个工程Clean一下,至于Clean在哪,建议到Help下面搜索一下
  • XCode 3可能还有个Empty Caches… -> Empty

原因我想大家已经猜到了,编译一个新版本的应用只是把要修改的部分替换成新的,似乎并不会对删除多余的东西,比如你之前建立的xib(nib),这也就导致了虽然你的代码已经不在依靠那个nib运行了,但是原来的nib还是残留在那里,并且会在运行时加载,这就可能造成一些问题.

同样,如果你错误地删除了一个nib而没有"刷新"一下你的应用,这个错误就会被掩盖起来,等你的应用编译或安装到其他机器上时就可能产生各种错误.

了解了原理也就知道了替换第一步的放法:

  • 找到xxx.app,显示包内容,删除你不想要的nib文件

–以上–

XCode 4连接gitolite服务器的方法

XCode 4终于支持git了,但是要连接一个gitolite服务器还是稍微有点麻烦,不能通过orgnizer直接添加,需要执行以下几步(关于gitolite的搭建参考这篇"

  • 编辑 gitolite-admin/config/gitolite.conf
    仿照已有的内容,添加一个repository
  • git add config/   (假设在gitolite-admin目录下)
    git commit -m "MESSAGE"
    git push
  • 从返回的信息中我们可以看到添加了那个repository
  • git clone 下来新添加的repository
  • 在Xcode中新建项目,然后保存进clone下来的文件夹内,注意别添加本地的git
  • 再次add commit push
  • 接着用XCode打开项目就可以在Orgnizer的repository标签里看到了

–以上–

在XCode 4中使用TODO FIXME等标记

在XCode 3,我们可以用类似这样的注释来方便我们标记需要修改的部分:

// TODO:
// FIXME:
// !!!:
// ???:

XCode 4不知为何不支持这一功能了,网上有一种解决方法,可以在编译后的Warning里面看到我们标记的TODO, FixME等,原文在此,转发过来:

  • 进入项目属性设置那个页面
  • 选择一个Target
  • 选择Build Phases标签
  • 点击右下角的Add Build Phase
  • 展看上面刚出现那一栏Run Script,输入以下内容
    KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
    find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"

–以上–

XCode 4免证书真机调试

本文转载总结自世界各地,如有侵权还请见谅.

目前可以保证是最简便的方法

方法如下:

  • 创建证书,这里不多说了,直接参考这里创建证书的步骤,不要做除创建证书以外的工作
  • 终端: sudo /usr/bin/sed -i .bak 's/XCiPhoneOSCodeSignContext/XCCodeSignContext/' /Developer/Platforms/iPhoneOS.platform/Info.plist (其实就是把这个Info.plist中所有XCiPhoneOSCodeSignContext改成XCCodeSignContext,手动替换也可以)
  • 修改项目配置里面的TARGETS:选择ALL找到Code Signing Identity,选择iPhone Developer (这里说的不太明白,大家试一下就知道了)

此时你应当重启下XCode尝试一下是否可以通过真机运行(此时应当是app能装到真机上但是会出现一个错误不能debug,程序也没运行,但是可以像正常应用一样点击运行了,要想可以debug应当做最后一步的工作)

  • Xcode的File菜单上,File >> New >>New File >> iOS >> Code Signing >> Entitlements 新建一个Entitlements.plist,然后在之前修改TARGETS的地方找到Code signing Entitlements,键入:  ./你的项目名/Entitlements.plist(这个路径取决于Entitlements.plist的位置) ,接着运行试试吧!

PS. 如果仍未成功,回复中的内容可能对你有帮助。

–以上–

在iPhone/iPad/iPod上查看iOS文档

7.26更新:iPad基本不用看了,拿模拟器试了下发现官方文档对iPad支持甚好,而离线版缺少对iPad的支持,无法通过Safari打开

苹果的官方文档甚是强大,对开发的各个方面都进行了及其详尽的介绍,作为开发者当然要时常翻看,本地的文档只能在电脑上看,要想用我们的iDevices查看文档只好连网看在线版的,但由于网速限制不够有效率,官方文档虽然支持转换成PDF,但是转换速度很慢,转换后一堆超链接也失效了.另外我找了好久也没有一个叫"Procket Documentation"或者类似的App,实在有些遗憾.

这里有一个不太完美的解决方案:官方文档虽然都是docset格式的,但其实右键显示包内容一看就是一堆html,css啥的,和在线版的文档一样完全可以用浏览器解决,所以只要把docset里面的Documents文件夹拖到你的iDevices里面就行了,如果你没有越狱就用GoodReader啥的看吧,不过我用iPhone 4测试效果不太理想,文档首页加载奇慢,而且显示不全,那个搜索不知道好不好使,太卡没法测试,iPad 2不知道效果能怎么样,有iPad 2的同学试验下最好在评论中说下效果,别的页面也可以直接浏览,不过效果没有桌面版的Safai那样好,排版似乎有些问题(不是大问题,试下就知道了),但是不影响看.

如果越狱了,可以在Cydia里搜索下lighttpd,安装,最好也安装一下Lighttpd SBSetting Toggle,安装后重启,然后就可以用Safari访问127.0.0.1了.(这里只介绍下安装那个Toogle后的使用方法,Lighttpd SBSetting Toggle的说明中提到webroot地址是/var/www,配置文件是/etc/lighttpd2.cong,用默认的配置文件访问127.0.0.1就可以直接看到/var/www下的目录.只要把之前提到的Document文件夹放这里就行了,接下来怎么做就不用说了吧.) 用自带Safari打开文档,文档首页依旧很卡,但是比GoodReader强多了,而且搜索也勉强可以用(iPhone 4测试,其他不知效果如何),其他页面和GoodReader浏览效果一样,都是排版有点问题,不影响效果.

目前为止也没做太多测试,现在正考虑用其他浏览器看看效果是否能好些(Operamini试了下根本不行),如果有发现就会更新这篇文章,没有就这样了.

其实这个方法也可以用来查看Android文档什么的.

–以上–

PS:搜狗输入法Mac版真TM2(Ver 1.1),中文标点那个选项没有记忆,切个输入法就又回到默认值了,写这篇文章净折腾全角半角的问题了.另外所谓的词库也就那回事,跟Win版没法比.

推荐:XCode 4视频教程

上一个项目做的差不多了,所以这几天尝试了下XCode 4,发现4与3的区别蛮大的,快捷键也改变了不少,一些功能也不知为何被精简了,比如User Script(应该是被Code Snippet代替了,不过感觉没有Script强大). 看文档实在太麻烦,上网找了找相关资料,发现之前的Become Productive in XCode系列又专门为XCode 4做了10个视频,而且这回是免费的,果断下载过来分享,毕竟看视频要比看文档直观多了。

这里还有个快捷键的PDF

XCode 4的这几个视频虽然感觉不如3的那么经典,但是作为XCode 4的快速入门还是相当有价值的。如果上面那些由于某些原因无法下载,我这里还提供一个115的下载地址,Have Fun。

PS:这篇介绍XCode 4之前的文章都是以XCode 3为基础的,要查看XCode 3的有关文章请通过标签或搜索查询.

–以上–

[下载]XCode技巧视频教程

这个视频教程之前在这篇文章里提到过,总体来讲是个非常不错的教程,从基本的快捷键到各种TextMarco,自定义脚本等统统介绍了一番,话说"工欲善其事,必先利其器",这个视频教程算是"利其器"必备.

视频以XCode3为基础,XCode4我还没装,某些地方会有挺大区别,这些地方自己查查就好了,等我安装XCode4后会出一个简单的教程介绍一下有区别的内容(不过短期内不会了,所以不要指望我)

支持原作者请通过这篇文章的相应连接寻找.

原版已经不能从官网下载到了, 放出个下载地址

 

XCode SVN 设置指南

经初步测试,使用本文的方法,可以解决文件丢失,commit错误(Error: 155005  Working copy not locked..等)等问题

  • 修改svn配置文件
svn的配置文件在~/.subversions/config
修改方法:
1.找到 global-ignores 一行,去掉注释用的“#”,编辑(添加)成 global-ignores = build *~.nib *.so *.pbxuser *.mode *.perspective*
2.找到 enable-auto-props = yes 把注释去掉(这步似乎可以忽略)
3. 在[auto-props] Section添加以下内容
     *.mode* = svn:mime-type=text/X-xcode
     *.pbxuser = svn:mime-type=text/X-xcode
     *.perspective* = svn:mime-type=text/X-xcode
     *.pbxproj = svn:mime-type=text/X-xcode
 
关于修改配置文件的更多讨论在这里
 
  • SCM Config
XCode 菜单中 SCM >> Configure Repositories
 
按 “+” 添加一项
     Name:任意
     URL:svn://[email protected]/opt/ibmtc/SUBPATH 然后按tab切换 下面那几个除了Password都自动填好了
     Scheme: svn
     Host:svn.footoo.org
     Path:/opt/ibmtc/SUBPATH
     User: USERNAME
     Password: PASSWD
下面有个指示灯,如果显示绿色并有Authenticated字样则表示设置成功
  • 添加项目
1. 如果不是新建的项目 直接到第二步 SCM >> Repositories 选择好对应目录 点Import选择想要进行版本控制的项目(最好是“干净”的项目 即没有.svn文件夹 否则可能有一些错误)
2. 在刚才的窗口选择刚添加的项目 Check out,相当于用svn对项目进行初始化,加入一些控制信息。这一步很重要,缺失了将不能进行版本控制
3. 打开Check out下来的项目 打开项目属性窗口 >> General >> Config Roots & SCM…  下拉按钮选择Subversion 下面的table中的Repository选择你之前在Configure Repositories中添加的那个,一般都会有Recommended字样
 此时在菜单 SCM中就多出了很多项目
在左边的项目树中,邮件点击表头,选择SCM可以多出一栏现实项目修改信息
文件的标示状态简介如下: 

Cocoa中的weak reference

以下所有内容翻译自官方文档,如有不当之处还请各位指正。

Weak Reference to Objects(弱引用)

————————————————————————————————————

retain 一个 object 创建一个 “Strong” reference,一个object在直到它所有的strong reference都release了之后才能dealloc,因此object的生命周期是受它的Strong reference的所有者控制的。某些情况下,这种行为不是我们所期待的,你也许想有一个不会阻止一个object dealloc的reference,这种情况下,你就拥有一个“Weak” reference,weak reference是通过存储一个不retain相应的object的指针所创建的。

 
weak reference在会有循环reference要创建时是必要的。比如,如果Object A和 B之间互相Communicate,它们各自需要一个对方的reference。如果它们各自retain了对方,那么直到它们之间的Connection切断之前它们之中任何一个都不会dealloc,但是它们之间的Connection要等待它们其中任意一个dealloc了之后才能切断,这就产生了一个矛盾。要解决这个问题,其中一个object作为一个次级(subordinate)角色并且拥有对方的一个weak reference。一个具体的例子,在一个view继承体系中,一个parent view拥有并因此retain他的childe views,但是一个child view不拥有它的parent;而又必须知道它的parent是谁,所以就有一个指向它的parent的weak reference。
 
Cocoa中另一些weak reference的例子包括但不局限于这些:table data sources,outline view items,notification observers,各种targets和delegates。(比如一个NSTableView不会retain它的data source,一个NSApplication不会retain它的delegate)
 
当你需要向一个你只拥有weak reference的object发送消息时,就要小心,那个object是不是已经dealloc了,如这这样会使你的程序Crash。
后面又是一些例子(delegate 和notification),不翻译了。