RSS

Monthly Archives: 三月 2012

Mac OS X下DMG和ISO文件之间的转换

听说Windows平台下ultraiso可以直接将dmg文件转换为iso格式的文件,但是苹果系统中貌似没有好用的软件,在App Store中倒是看到了几款收费应用据称可以做dmg和iso之间的转换,但是看到评论也说貌似效果不太好。

于是又通过无所不能的谷歌大神找到了这篇文章,通过Mac OS X自带的工具就可以做到。

1. 打开Teminal。

2.1 如果需要将DMG转换为ISO,那么输入以下命令:

hdiutil convert dmg文件路径 -format UDTO -o 输出的iso文件路径

2.2 如果需要将ISO转换为DMG,那么输入以下命令:

hdiutil convert iso文件路径 -format UDRW -o 输出的dmg文件路径

文件比较大的时候,需要耐心等待。转换iso的时候,生成的文件名后缀会是cdr,改成iso就可以了。

想要了解更多hdiutil有关的信息,请查看苹果官方文档


 
添加留言

Posted by on 三月 31, 2012 in Mac OS

 

Tags: , ,

Dell OPTIPLEX 390 Ubuntu中光驱无法使用的解决方案

最近需要配置一台服务器,公司服务器不能给我分配帐号,我就申请了一台戴尔的台式机自己捣鼓。机器型号是Dell OPTIPLEX 390,出厂自带的Ubuntu,后来需要用到光驱的时候,居然发现找不到光驱。lshw -short,发现根本就没有加载这个设备。同时确认光驱在引导启动时可以正常读取系统盘,只是在进入Ubuntu系统之后无法正常使用。

给戴尔的技术支持打电话,得到的方案是重装Windows,reset CMOS(BIOS),升级BIOS,将Ubuntu恢复到出厂设置。技术支持的态度蛮好的,可能也是Linux国内用户太少,他们对这方面也没做培训,所以给不出好的解决方案。

后来谷歌到有Dell OPTIPLEX 390的用户给Ubuntu报了一个bug(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/794642),也表示无法使用光驱。有兴趣的同学就看看bug的确认和解决过程吧,反正原因就是英特尔某些芯片组(这里是Intel H61 Chipset)与Linux内核(这里是Linux 2.6.38-8-generic-pae i686)不兼容。

解决方案是升级Linux内核到2.6.38-13以上,或者直接通过Update Manager升级Ubuntu到最新版本。

 
添加留言

Posted by on 三月 29, 2012 in solutions

 

Tags: , , , ,

苹果禁止访问UDID(uniqueIdentifier)的替代方案

最近看到新闻,苹果已经开始拒绝访问了UDID的App提交到App Store了,轰轰烈烈的用户隐私保护运动似乎初见成效。但是程序员们似乎要郁闷了,没有了UDID,我们该如何追踪用户呢?

长期以来,iOS程序员们使用UIDevice.uniqueIdentifier作为追踪单一用户(设备)的标识。在iOS5.0 SDK中,我们可以看到uniqueIdentifier已经被注明为Deprecated的了,但是官方文档也提供了建议的替代方案,也就是本文的第一种替代方案。

方案一:
使用UUID,根据官方文档的说法:

Do not use the uniqueIdentifier property. To create a unique identifier specific to your app, you can call the CFUUIDCreate function to create a UUID, and write it to the defaults database using the NSUserDefaults class.

我们应该使用CFUUIDCreate来创建一个UUID作为该用户(设备)在本应用的唯一标识,并且结合NSUserDefaults在第一次创建之后,一直使用该该UUID。稍后给出代码链接…

方案二:
使用MAC地址(网卡物理地址)

参考链接:http://iphonedevelopertips.com/device/determine-mac-address.html

但是使用MAC地址与使用uniqueIdentifier没有本质区别,还是违背了保护用户隐私的初衷,并且苹果未来完全可以采取相同的措施。

方案三:
使用第三方的服务,例如OpenFeint宣布的OFUIDOpenUDID,或者只允许注册会员使用,结合会员系统追踪用户。

 
添加留言

Posted by on 三月 28, 2012 in iOS

 

Tags: , , , ,

Xcode中复制变量值的方法

Xcode是一款非常不错的IDE,尤其对于iOS开发者来说(-_-!其他的IDE也开发不了啊。。。)。但是在Xcode也有一些不完善的地方,比如在调试的时候,想拷贝一个NSString的值,还真挺不容易的。

有两种方法可以拷贝一个NSString的值:
1. 右击想要查看的变量,选择View Memory of “*变量名”,内存中有可能会显示出字符串。
view memory of a variable

2. 在console中输入po 变量名,打印出字符串的内容。po会打印出[obj description]的内容。
po a variable

选中复制,就可以了。

 
添加留言

Posted by on 三月 28, 2012 in Xcode

 

Tags: , ,

UITextView使用 sizeWithFont:constrainedToSize:lineBreakMode:计算自适应文本高度

前不久QA报了个文字显示不全的bug,我看了下代码,发现是计算高度出了问题。之前的同事在UITableViewCell中使用了UITextView,但是计算高度时使用了和UILabel相同的的方法。

其实UITextView在上下左右分别有一个8px的padding,当使用[NSString sizeWithFont:constrainedToSize:lineBreakMode:]时,需要将UITextView.contentSize.width减去16像素(左右的padding 2 x 8px)。同时返回的高度中再加上16像素(上下的padding),这样得到的才是UITextView真正适应内容的高度。

示例代码如下:

+ (float) heightForTextView: (UITextView *)textView WithText: (NSString *) strText{
    float fPadding = 16.0; // 8.0px x 2
    CGSize constraint = CGSizeMake(textView.contentSize.width - fPadding, CGFLOAT_MAX);

    CGSize size = [strText sizeWithFont: textView.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    float fHeight = size.height + 16.0;

    return fHeight;
}
 
2 Comments

Posted by on 三月 21, 2012 in iOS

 

Tags: , , ,

__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用

使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。但是像我这种Java基础本身就不牢固,做了两年的iOS已经习惯手动管理内存的半吊子,使用ARC还是经常碰壁。

最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。

根据苹果官方的文档(https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html):

__bridge只做类型转换,但是不修改对象(内存)管理权;

__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;

__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。

 
添加留言

Posted by on 三月 20, 2012 in Objective-C

 

Tags: , , , , , ,

5个海盗分1000颗宝石的问题

有五个海盗,他们准备洗手不干了,于是决定将之前抢来的1000颗宝石分了。规则是从老大开始提案,若同意提案的人超过一半,则按照该提案分配。若不超过一半,则将提案的人扔到海里喂鲨鱼,然后老二老三老四老五依次提案,规则如前。这些海盗都非常贪婪,精于算计,并且异常凶残,在不损坏自身利益的情况下将乐于扔人下海。现在如果你是老大,你该如何提案呢?

很早的问题了,一直流行到现在,有很多种不同说法。有主角是强盗,小偷,盗贼也有海盗。有物品是宝石,钻石或者金块。有数量是10,100或者1000。当然题意没变,解答的方法也没变。

有些朋友会说各分200个宝石,这个提议会被通过,但是似乎不符合老大贪婪的性格。
那么老大独吞1000个宝石呢?直觉是不大可能被通过,而且结果也是老大将被扔到海里了。那要怎么办呢?

查看全文 »

 
添加留言

Posted by on 三月 20, 2012 in

 

Tags: , , , , , ,

Xcode4中代码补全(Code Completion)失效的解决方案

以前好像很少碰到Xcode中代码提示出问题的情况,即使碰到了大多也是后来自然的就好了,最近换用了Xcode4.3,经常遇到这个问题。

通过无所不能的谷歌大神,找到了苹果论坛上提供的一个解决方案(https://discussions.apple.com/thread/2746273?start=0&tstart=0):

1. cd进入~/Library/Developer/Xcode/DerivedData
2. ls一下
3. 找到你的项目所用的目录(一般以你的项目名开头)
4. cd 目录名
5. rm -r Index 删除掉你的项目所用的索引文件夹

或者在Xcode->Window->Organizer->Projects选中你的项目,点击如下图Derived Data右侧的Delete按钮

注:
(1) 原文表示删除 ~/Library/Developer/Xcode/DerivedData下所有的文件,我尝试发现只需要删除当前项目相关的索引文件即可
(2)  DerivedData从字面上理解应该是收集到的数据,应该是Xcode针对这个项目缓存的一些数据,不会影响项目本身的完整性

 
1 Comment

Posted by on 三月 17, 2012 in Xcode

 

Tags: , , ,

Xcode4/iOS5调试UncaughtException崩溃First throw call stack不打印方法名的解决方案

最近连接iOS5.0.1真机调试的的时候,发现UncaughtException导致crash之后*** First throw call stack:后面没有打印可读的调用堆栈,以前崩溃之后会显示详细的调用的方法名等信息,但是现在都是一堆内存地址0x…..0x…..。

我起初也不知道怎么回事,之前似乎也没碰到过。谷歌了一下,看到了一篇文章(http://stackoverflow.com/questions/7841610/xcode-4-2-debug-doesnt-symbolicate-stack-call)讲貌似是iOS5.0开始做了某些修改,导致不能打印方法名了。但是也有补救措施:

自己定义一个方法:

static void uncaughtExceptionHandler(NSException *exception) {

NSLog(@”CRASH: %@”, exception);

NSLog(@”Stack Trace: %@”, [exception callStackSymbols]);

// Internal error reporting

}

然后在程序初始化的时候调用(比方说放到- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 里面的第一行):

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

 
添加留言

Posted by on 三月 17, 2012 in iOS

 

Tags: , , , , ,

Dreamhost上如何添加MIME Types

根据Dreamhost官方文档(http://wiki.dreamhost.com/MIME_Types)的说法,他们采用Apache做http服务器,自定义的MIME Types只需要添加到站点根目录的.htaccess文件中就可以了。

例如:

AddType application/octet-stream ipa
AddType text/xml plist

 

 
添加留言

Posted by on 三月 14, 2012 in solutions

 

Tags: , , ,