然而,这些问题往往都是些小问题,明明不应该花费那么多时间,但是我经常被这折腾的够呛。所以,我决定记录一下。以备下次再用。
还记得当初iOS7刚出来的那会儿,对于扁平化与拟物化之间争议的血雨腥风。然而现在大家都已经习惯了扁平化的设计,看到拟物设计时,倒是要吐槽一下了。
对于工程师而言,来不及感叹世事变化太快,这些都是设计师们的事儿,我们还是老老实实做好iOS6、iOS7的适配工作吧。现在扁平化大行其道,我们需要跟iOS6系统本身自带的很多效果say goodbye。
UINavigationBar,UITabBar,UIToolBar都是UIBar,下面我们看看iOS6与iOS7之间的差别。
很多时候,iOS6自带的那种拟物的立体的效果,会让整个页面非常不协调,我想每位iOS开发工程师都懂的。所以,我们需要把它“拍扁”。
拍扁有两种方式,一种设置背景色,一种设置背景图片。
1.设置背景色:
首先定义一个UIColor的宏
1 | #define ColorWithHexValue(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0] |
然后设置UIBar的背景色,需要区分系统版本
1 2 3 4 5 6 7 8 9 10 | if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { [[UINavigationBar appearance] setBarTintColor:ColorWithHexValue(0x289BBE)]; [[UITabBar appearance] setBarTintColor:ColorWithHexValue(0x289BBE)]; } else { [[UINavigationBar appearance] setTintColor:ColorWithHexValue(0x289BBE)]; [[UITabBar appearance] setTintColor:ColorWithHexValue(0x289BBE)]; } |
iOS6拍扁后的效果图:
2.设置背景图片:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //--- 创建一张图片 --- //--- 此方法可以添加到UIImage的Category方法中 --- CGRect rect = CGRectMake(0, 0, 1, 1); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //--- 拍扁 拍扁 --- [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; [[UITabBar appearance] setBackgroundImage:image]; |
iOS6拍扁后的效果图
我们看一下,iOS6中拍扁之后的效果,客观您按需索取吧。总的来说,后面的方法更加扁平。在iOS7中的效果是一样的,您随意选择。
3.在iOS7下所有的UIBar还有毛玻璃效果,属性为translucent
NavigationBar禁用毛玻璃效果:
1 | self.navigationController.navigationBar.translucent = NO; |
TabBar禁用毛玻璃效果:
1 | self.tabBarController.tabBar.translucent = NO; |
我们来看iOS6与iOS7之间,导航栏的区别,如图:
1.首先,我们来解决Back按钮的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //--- 统一设置UIBarButtonItem的文字属性,包括返回按钮 --- NSDictionary *titleAttributes = @{UITextAttributeFont: [UIFont systemFontOfSize:16], UITextAttributeTextColor: [UIColor whiteColor] }; [[UIBarButtonItem appearance] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal]; //设置图片拉升的区域,根据需要自己设置 UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 18, 0, 0); UIImage *backImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:edgeInsets]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; //----- 按照系统版本 设置返回按钮 ----- if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { //设置返回按钮文字的位置,根据需要自己设置 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-5, 0) forBarMetrics:UIBarMetricsDefault]; } else { //设置返回按钮文字的位置,根据需要自己设置 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(3, 1) forBarMetrics:UIBarMetricsDefault]; } |
测试结果,在模拟环境下iOS7中有点问题,第一次push的时候,back按钮箭头不可见,在真机上没问题。
在iOS7环境下,还有另外一个方法能设置返回按钮
1 2 3 4 | UIImage *backImage = [UIImage imageNamed:@"back"]; [[UINavigationBar appearance] setBackIndicatorImage:backImage]; [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backImage]; |
2.然后,我们来解决NavigationBar的title
1 2 3 4 | NSDictionary *navTitleAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont boldSystemFontOfSize:18]}; [[UINavigationBar appearance] setTitleTextAttributes:navTitleAttributes]; |
3.最后,来设置一下状态栏
1 | [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; |
OK,看一下,设置完后的效果:
针对UITabBar,它的拍扁问题,在前面已经解决了,下面我们再看几个问题。
1.设置图标与文本
1 2 3 | vc.tabBarItem.title = @"我的客厅"; vc.tabBarItem.image = [UIImage imageNamed:@"icon_home_nm"]; vc.tabBarItem.selectedImage = [UIImage imageNamed:@"icon_home_hl"]; |
2.设置文字与图标之间的距离
1 | vc.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, -3); |
3.设置角标
1 | vc.tabBarItem.badgeValue = @"5"; |
我们来看一下效果:
1.关于原点
iOS7系统下,原点在屏幕的左上角,但是我们给UITableview的原点设置成{0,0}
时,又感觉它的原点在{0, 64}
的位置呢?是因为iOS7下,ViewController有一个automaticallyAdjustsScrollViewInsets
属性,默认为YES。
1 | self.automaticallyAdjustsScrollViewInsets = NO; |
假如UINavigationBar的毛玻璃效果设置成NO,也能打到相同的效果
1 | self.navigationController.navigationBar.translucent = NO; |
2.cell的选中效果
很多时候都需要用到自定义的cell,cell选中的效果也需要自定义。
如果给cell的中加一个Button,来体现点击的效果,就感觉比较low了,关键效果也不乐观。使用系统自带的cell的Selected效果感觉就比较好了。
1 2 3 4 5 6 | //selectedView可以设置圆角,大小等 UIView *selectedView = [UIView alloc] init]; selectedView.backgroundColor = [UIColor lightGrayColor]; //self为cell self.selectedBackgroundView = selectBgView; |
3.cell的分割线
UITableviewCell自带的分割线,基本上无法满足设计师的要求,所以我们还需要自己来画一条分割线。
1 2 3 | UIView *sepLine = [UIView alloc] initWithFrame:frame]; sepLine.backgroundColor = [UIColor lightGrayColor]; [cell addSubview:sepLine]; |
添加完分割线后,发现选中时分割线不见了。我们可以用另外一种方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //--- 创建一张图片 --- CGRect rect = CGRectMake(0, 0, 1, 1); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //设置分割线 UIImageView *lineImgv = [[UIImageView alloc] initWithFrame:frame]; lineImgv.image = image; [cell addSubview:lineImgv]; |
这里以分割线为例,其他设置成背景色的情况也是一样的。
我们有时候需要实现这样的需求:对文本中的部分文字改变样式(加粗、改变字体大小、改变文字颜色);文本需要识别手机号码、邮箱;文本前面几个字不可编辑等等。
1.对文本中的部分文字改变样式
1 2 3 4 5 6 7 8 9 | NSString *string = @"海风呼啸,海浪涛涛!"; NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:16], NSForegroundColorAttributeName: [UIColor redColor]}; NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:string]; [attributeString setAttributes:attributes range:NSMakeRange(0, 2)]; label.attributedText = attributeString; |
NSMutableAttributedString对象的Attributes对象是NSDictionary类型,它的key可以在UIKit中的NSAttributedString.h文件中找,按需所取。
这里以UILabel为例,UITextView也有attributedText属性。
效果如图:
2.文本需要识别手机号码、邮箱
1 | textView.dataDetectorTypes = UIDataDetectorTypeAll; |
通过设置这个属性,就能自动识别手机号码、日期、链接了。
3.文本前面几个字不可编辑
应用场景:回复某条信息的时候,往往会有个前缀“回复xxx:”,但是这段如果不特殊处理,用户很容易误操作把它删掉,我们从程序上保证前缀的这几个文字不能被删掉。
我们需要实现一个UITextView的委托。
1 2 3 4 5 6 7 8 9 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (range.location < 6) //位置的大小,根据需要自己设置 { return NO; } return YES; } |
有时候键盘上面需要加一条,完成诸如隐藏键盘等功能,如图:
这里需要用到UITextView/UITextField的一个属性inputAccessoryView
1 2 3 4 5 6 | //此View自行玩弄
UIView *accessoryView = [[UIView alloc] init];
...
//关键是这句
textField.inputAccessoryView = accessoryView;
|
然而,这些问题往往都是些小问题,明明不应该花费那么多时间,但是我经常被这折腾的够呛。所以,我决定记录一下。以备下次再用。
FIR,6月14日上线以来,我看见了包括QQ、聚美、快的、人人等众多知名企业也在使用。我也将公司的APP的内侧放在FIR上,体验良好。中间也遇到了一些问题,下面,我将自己的使用经历分享给各位,细说其中的方便与不方便。
在项目证书中添加iOS设备的UDID,iOS开发工程师都知道。
对于工程师而言,找设备的UDID是轻而易举的事儿,但是对于一般用户可不是件容易的事儿。FIR提供了一种非常方便的方式,让用户找到自己设备的UDID。操作如下:
在iPhone中打开Safari,地址栏输入如下地址http://fir.im/main#!/udid
,按照提示安装一下FIR的一个证书,便可马上知晓自己iPhone的UDID,极为方便。
在上传到FIR之前,首先需要吧APP打包成ipa包,打包流程如下:
注意:打包时,设备不可选模拟器,且不可插着iOS设备。前者会导致Archive不可选,后者会导致APP在其他型号的手机上,可下载,却无法安装
APP成功打包成ipa包。
这个步骤也极为简单,在FIR注册一个账号,上传ipa包。
注意:记得选择“在广场中显示”状态为on,或者“允许所有人下载”的状态为on,否则测试用户在不登录FIR状态下访问APP的连接地址,会出现403错误
有两种方式:扫一扫、iPhone直接访问
扫一扫:电脑的浏览器中访问APP(fir.im/xxxx),然后用手机的任何一款可扫描应用扫一扫二维码,轻轻松松安装完成。
iPhone直接访问:在iPhone中打开Safari,输入连接地址(fir.im/xxxx),直接下载即可。
]]>FIR,6月14日上线以来,我看见了包括QQ、聚美、快的、人人等众多知名企业也在使用。我也将公司的APP的内侧放在FIR上,体验良好。中间也遇到了一些问题,下面,我将自己的使用经历分享给各位,细说其中的方便与不方便。
从杭州坐大巴出发,到朱家尖已近下午1点。我们住在朱家尖一个叫东沙的地方,住处叫“有家客栈”。住处环境优美,干净清雅。客栈出门,不远处就是海滩,一眼望去,湛蓝的天空下,大海清澈辽阔。海滩上阳光充足,沙滩细腻柔软,海风强劲,一波又一波的小小海浪打在腿上,清凉舒适,好不惬意。
在客栈,伙食颇丰,有吓,有贝,有蛤,有鱼,有鱼,还有鱼(不好意思,我不知道鱼的名字),而且味道鲜美。至于价格,我是不关心滴,这事儿归公司管,不归我管,哈哈!
第一天下午,大家在沙滩上踢了一场别开生面的沙滩足球。平时一天到晚坐在办公室写代码,这样全身的动一动,虽说有点累,却也非常舒服。晚上的时候,在海滩烧烤,啤酒加烧烤,本是绝佳的搭配,可惜晚上海风很大加上在沙滩上活动,烧烤上除了孜然和调料,还有薄薄的一层沙子,吃起来那个味道,呵呵,我想你懂的!烧烤完毕,大家玩了一会儿游戏,惩罚、奖励、真心话、大冒险,就那么回事儿吧。
第二天,大家自由活动,有一批小伙伴去普陀了,有一批人去了南沙,那里有沙雕。我不想去普陀,也不想去南沙,于是乎去白山逛了逛。既是山,那便是山!白山不高,路途倒是有几分曲折,其中有几个石缝,相当狭窄,石碑上书宽约35厘米,如果你是胖子,那就要稍稍考虑一下了。山上风景算不上好,但是空气清新,登顶后视野开阔,也算值得走上一趟。
中饭过后,打道回府!
朱家尖之行,总结如下:东沙静,南沙闹,白沙俊!静于海,闹于市,俊于石。朱家尖,是个不错的悠闲旅游之处!
2014-06-06
]]>端午期间,雨过天晴,正是观景好时节,加上有美女邂逅,一起玩耍,游的颇为尽兴!故小记如下。
江南长城,巍巍然岁月沧桑;国清古寺,悠悠然香火长明;琼台仙谷,茫茫然欲仙飘飘;石梁飞瀑,隆隆兮苍翠欲滴。
琼台,虽蔚为壮观,然人凿之迹略盛;国清,虽千年古刹,然人气稍旺,却也无法欣赏;长城,绵延环绕,美女相随,才子滔滔,恰如其分;石梁,苔痕阶绿,飞流轰鸣,心旷神怡。
故最喜是石梁,隆隆之声入耳,入脑,其余之事便无法入心,心静则神怡,是为极好。长城次之。
台州之行,更好的是人,一起玩耍的小伙伴们,大鹏、阿巧、张悦、张培,以此为记,谢过各位!
2014-06-02 端午
]]>端午期间,雨过天晴,正是观景好时节,加上有美女邂逅,一起玩耍,游的颇为尽兴!故小记如下。
]]>身为一名iOS开发者,已经迫不及待的想试试这些新功能与特性了,所有的一切从Mac操作系统(OS X Yosemite)开始。在这里介绍操作系统的安装过程,并我从非专业的角度,聊一聊对操作系统的使用体验。
下面记录我尝鲜OS X Yosemite的全过程。
每次系统升级,都要及时备份,这是习惯。
即使不是系统升级,也要记得经常备份,以防不测。常言道“常在河边走,哪有不湿鞋”,不要抱着侥幸心理做危险的事情,有一天真当数据找不回来了,那就真的呵呵加拜拜了。总之,不作死就不会死,常常备份不会错!
系统备份,Mac下的Time Machine简单实用,但是比较花时间,共计花时约3小时。
备份系统,漫漫兮一时半会儿好不了。顺便下载OS X Yosemite Developer Preview。
此时,可以那本书看看,奋斗的人们我们要抓紧每一分钟学习;可以拿起手机刷刷微博,新时代的骚年要紧跟时代的节奏;也可以跟女朋友聊聊天,给她讲讲如何Write the code,Change the world。好吧,其实爱干什么,是你的事儿,我只是捧着《Mac Talk》,读了一会儿。
现在官方出的操作系统名称叫“Yosemite Developer Preview”。官方只能通过开发者账号下载。如果你没有开发者账号,也没什么问题,现在网上应该有很多资源了,google一下去吧。
安装包下载完毕,一键安装,耐心等待,该干嘛干嘛去!
重现一下安装Yosemite过程:
OK,系统安装完毕,迫不及待来体验一下“优胜美地”。先整体感受一下:
OK,图片展现到此为止。接下来,吐槽一下“Yosemite Developer Preview”:
UI上,总体感受是丑的,并且问题多多。Folder边框极不协调,Folder颜色也不好看,图标也尚未全部扁平化(比如iTunes),有些地方的布局出现错乱(详见用户与组图片,通知栏设置后出现显示混乱)。
系统安装完,经我不完全测试,不少软件使用上有问题,例如VM虚拟机无法使用,Mou的编辑也有问题,Foxmail无法使用。
应用程序在Application文件夹中删除后,在Launchpad中没有及时同步,系统重启才有效。
重启过3、4三次,其中一次登录时,死机!强制关机,重启后,正常使用!
Yosemite在交互上做了一些非常棒的改进。比如Dock中,如果应用程序正在使用,图标下面多了一个小小的灰色的原点,提示用户哪些用户正在使用(强迫症患者又有的忙了);通知栏继承了社交功能,其中有新浪微博,以后发文字微博会变得非常方便;
我看见网上有不少人说,安装完Yosemite Developer Preview后,看见扁平化很爽,我想说,好像没那么好看,至少这个版本看起来既不好看。虽然,“Yosemite Developer Preview”问题诸多,但是我相信精益救精的Apple公司,到等到“Yosemite”正式发布时,应该会很不一样!
尝鲜Yosemite,先到这儿吧。作为一名iOS开发者,其实我对Xcode6,iOS8,Swift更感兴趣。接下来,我要去探索这些了。
欢迎大家通过评论、微博等方式进行沟通交流
]]>身为一名iOS开发者,已经迫不及待的想试试这些新功能与特性了,所有的一切从Mac操作系统(OS X Yosemite)开始。在这里介绍操作系统的安装过程,并我从非专业的角度,聊一聊对操作系统的使用体验。
下面记录我尝鲜OS X Yosemite的全过程。
无奈公司区区4M的网速,实在无力,再加上AppStore的间歇性神经病发作,让安装一个开发工具的简单诉求成为一件极其不容易的事情。
当然,安装Xcode也只是第一步而已。模拟器,帮助文档,插件,这些都是必装项。
下面就记录一下,这次安装Xcode的那些事儿:
公司网速无力,新同事马上就来入职,想再AppStore上把Xcode下完,已经是不可能完成的任务了。当机立断,回家用我20M的网速下载安装包。
我现在下载的Xcode版本是5.1.1,需要开发者账户才能进入下载列表。如图
下载完成,安装这事儿,水到渠成!
另外说一句,即使我20M的网速,也很难下载的动着Xcode,但是用迅雷,开启迅雷离线下载,那下载速度,蹭蹭蹭蹭蹭蹭,一个劲的往上飙,2.4m/s的下载速度,那一个叫爽!
这就是迅雷的工具,给我带来的服务。除了感觉到爽以外,最重要的是给我节省了时间,这是一件多么美好的事儿。
在这里,我弱弱的呼吁一下:我们当支持正版,并且支持付费,让那些给我们提供服务的IT公司生存下去,并且给我们提供更好的服务!
接下来需要将模拟器安装一下,如果还是4M共享的网速,要把模拟器下载完成,是不是想死的心都有了。
那我们就离线安装一下,把别的电脑中已经下载完成的模拟器文件拷贝过来就ok了。
在这个目录下:
Library/Caches/com.apple.dt.Xcode/Downloads/
将此目录下的内容,拷贝到需要安装模拟器的电脑上相同的目录下。重新启动Xcode,即可安装模拟器,一会会儿功夫搞定!相信我!
帮助文档的离线安装方法跟模拟器是一样一样的,就是从已经安装完的电脑上讲文件拷贝过来就ok了。总而言之,言而总之,最麻烦的是下载,而且这些文件都不小。
文档目录:
/Applications/Xcode.app/Contents/Developer/Documentation/DocSets/
Xcode的开发环境,基本搞定!
如果你想提高你的开发效率,找到一些合适、好用的Xcode插件也是意见极为重要的事情,下面介绍一下,我自己现在在用的几款插件:
插件的安装目录在这里:
Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/
还有其他很多Xcode插件的,我经常使用的就是上面这些。有人说“插件就是生产力”,我觉得说的是非常准确的。
每个人都会用自己擅长的方式去处理问题,作为工程师,当从技术的角度去解决问题,即使需要解决的是技术问题。
大家有问题,欢迎通过留言、微博等多种途径进行交流
]]>无奈公司区区4M的网速,实在无力,再加上AppStore的间歇性神经病发作,让安装一个开发工具的简单诉求成为一件极其不容易的事情。
当然,安装Xcode也只是第一步而已。模拟器,帮助文档,插件,这些都是必装项。
下面就记录一下,这次安装Xcode的那些事儿:
本次重装是U盘启动安装,重装的Mac系统版本是Mac OS 10.9。下面图文记录过程。
下载任何一个都OK,我是从官网下载的。
这也是我安装过程中最为折腾的一个环节,网上很多教程其实是对OS X 10.9之前版本的,但又无特别说明,所以按着教程做完,启动盘依然用不了,非常郁闷。特此,说明一下,我安装过程的是针对OS X 10.9的。
1、准备一个至少8G的U盘
2、终端执行下面命令,显示隐藏文件,我们会用到隐藏文件
1 | defaults write ~/Library/Preferences/com.apple.finder AppleShowAllFiles -bool true |
然后重启Finder
1 | killall Finder |
3、打开下载的安装包,安装OS X Mavericks.app
,右键“显示包内容”,找到在“Contents”目录下的"SharedSupport"目录,找到InstallESD.dmg
4、找到BaseSystem.dmg
,这是一个隐藏文件,刚我们显示隐藏文件了,能看到它。双击InstallESD.dmg
,就看到了。
5、用“磁盘工具”抹掉U盘。选中U盘,点击“分区” - “选项” - 选择“GUID”分区表(只有这种分区才能引导安装程序),格式为“Mac OS 扩展(日志式)”,命名随意,点击“应用”。
抹掉之前,切记备份资料
6、将BaseSystem.dmg
恢复到我们的U盘。选中我们U盘,“源磁盘”为BaseSystem.dmg
(可拖动),“目的磁盘”为我们的U盘(可拖动),点击恢复,输入密码,恢复开始,这一步会花一些时间,耐心等待一会儿。
这步很重要,因为制作OS X 10.9启动U盘跟制作OS X 10.8的启动U盘,这一步是不一样的,大家要格外注意,我就是这步不对,一直搞不定!
我们的启动U盘基本完成,但还是差两步,马上就好了,不着急!
7、删除U盘中System/Installation目录下Packages替身文件,如下图
8、将InstallESD.dmg目录下的Packages目录拷贝到U盘的System/Installation中。
9、运行,下面命令将隐藏文件隐藏
1 | defaults write com.apple.finder AppleShowAllFiles NO |
OK,到此我们的启动U盘制作完成了,终于可以开始重装系统了!
OK,重启电脑,按住option,从U盘启动,下面就按部就班的来了。
因为之前电脑分了好几个盘,我把所有盘都合并成一个。如果你也需要用到这个,那就在安装的第一个界面里,左上角的地方找磁盘工具(这里恕我无法截图),对电脑的硬盘进行分区合并处理,这一步跟制作启动U盘时,格式化U盘是一模一样的,Mac OS 扩展(日志式),GUID分区表。
接下来,就没有难度了,一帆风顺,马上搞定!
有问题,欢迎通过留言、微博等方式进行沟通
]]>本次重装是U盘启动安装,重装的Mac系统版本是Mac OS 10.9。下面图文记录过程。
之前在InfoQ上看到唐巧对老郭的采访,采访的内容就是关于BeeFramework。看完那篇采访,感觉应该是个不错的框架,于是乎想学一学。正好,这段时间,工作上有点空闲。也把自己的学习过程记录一下。
BeeFramework是一个semi-hybrid(半混合)框架,运用XML、CSS、Objective-C构建iOS应用,基于MVC,并且适用于大型App的开发,已经有诸如QQ空间、屈臣氏中国等相当成熟的产品。
这个框架,初初体验的感觉,利用XML+CSS开发效率应该会提高很多。当前的最新的版本0.5.0,并且作者说打算在1.0版本打算做跨平台。
高效、跨平台,这样的框架无论这对开发者还是公司,都会爱不释手的!
项目地址:GitHub
对于框架的详细说明,在《developer_manual》文档中又较为详细的说明,文档在项目的document目录下,各位自己找找。这里就不多做介绍了。
我使用的BeeFramework的版本是0.5.0的,不同版本之间会有一些差异,特此说明一下。
对于新知识,理解很重要,当然感觉也很重要。我们先不急着来分析Bee的框架结构,首先,我们来构建一个Bee工程,感觉一下BeeFramework。
构建项目之前有些准备工作需要完成:
1、下载BeeFramework
2、下载Bee项目模板:Bee-Xcode-Template-master
3、下载一个小工具:xproj,用来批量进行ARC、非ARC混编的shell脚本。
OK,准备就绪,开始新建Bee工程,我们图文并茂,一步一步来。
1、安装Bee项目模板
解压Bee-Xcode-Template-master,终端cd到该目录,执行以下命令
1 | sh install.sh
|
2、新建Bee项目
运用模板新建的Bee项目,工程框架已经基本有了。结构应该是这样的
编译一下(Cmd+B),项目有错误,提示Bee.h
引用找不到。不着急,我们还没有把BeeFramework框架添加进来。
3、添加BeeFramework
在工程中添加BeeFramework框架项目中的framework
文件夹
4、批量添加-fno-objc-arc
因为BeeFramework是一个非RAC的框架,现在Xcode5.0以后新建的工程,都默认是ARC工程,所以需要对BeeFramework进行混编处理。
framework
目录下的所有文件都需要在Build Phases中添加-fno-objc-arc
,但是文件非常多,一个个添加,我相信,你会疯掉的。此时,你就需要用到这个小工具:xproj。
解压后,将xproj拷贝到工程的根目录下,终端cd到工程的根目录,然后运行下面命令
1 | sh xproj -s 需要添加编译参数的文件所在的文件夹 -t 目标工程文件 |
轻松搞定给上百个文件添加-fno-objc-arc
的工作。让我们来膜拜一下QFish大神,这是他的杰作!
构建工程完成,编译运行,搞定!
只是现在除了启动页,页面显示的一片黑色,就像我们学习BeeFramework一样,才刚刚起步,什么也不知道。下面我们尝试着给项目添加一些内容,让它看起来不那么单调。
你也可以用CocoaPods来管理BeeFramework,CocoaPods会帮你做好上面的3、4两步。如何使用CocoaPods,详见这里
首先,我们添加一个AppBoard_iPhone.xml
BeeFramework是一个用XML+CSS页面布局的框架,利用模板新建的项目中有AppBoard_iPhone.h
,AppBoard_iPhone.m
,却没有AppBoard_iPhone.xml
,需要我们自己添加。
修改AppBoard_iPhone.xml
文件中内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="UTF-8"?> <ui namespace="AppBoard_iPhone"> <linear orientation="h" class="wrapper"> <image class="bg"/> <view class="view blue"/> </linear> <style type="text/css"> .wrapper { width:100%; height: 100%; } .view { width: 50%; height: 100px; border-radius: 10px; } .blue { background-color: #007DBC; } .bg { width: 100%; height: 100%; position: absolute; background-color: #E6E6FA; } </style> </ui> |
然后,修改AppDalegate
找到AppDalegate中的- (void)load
,修改如下
1 2 3 4 5 6 7 8 9 10 11 | bee.ui.config.ASR = YES; //这句很重要 if ( [BeeSystemInfo isDevicePad] ) { //self.window.rootViewController = [AppBoard_iPad sharedInstance]; self.window.rootViewController = [BeeUIStack stackWithFirstBoard:[AppBoard_iPhone sharedInstance]]; } else { //self.window.rootViewController = [AppBoard_iPhone sharedInstance]; self.window.rootViewController = [BeeUIStack stackWithFirstBoard:[AppBoard_iPhone sharedInstance]]; |
最后,修改AppBoard_iPhone.m
AppBoard_iPhone.m
中有个ON_CREATE_VIEWS
方法,添加如下内容
1 2 3 4 | self.navigationBarShown = YES; self.navigationBarTitle = @"浪花一朵朵"; self.view.backgroundColor = SHORT_RGB(0x444); |
编译,运行!效果如下
虽然,页面还是很简陋,不过没关系,至少页面已经有内容了哦!继续加油学习!
大家有问题,欢迎通过留言、微博等多种途径进行交流
]]>之前在InfoQ上看到唐巧对老郭的采访,采访的内容就是关于BeeFramework。看完那篇采访,感觉应该是个不错的框架,于是乎想学一学。正好,这段时间,工作上有点空闲。也把自己的学习过程记录一下。
注册GitHub账号,不管有账号的没账号的,不解释。
这一步,非常重要,也比较有讲究。repository的命名有两种方式,并且对应的也会有两种hexo的配置方法。
1、yourname.github.io:
2、随意命名,如Blog:
建议使用第一种方式,两种命名方式均可,但是请注意后面的步骤,不同的命名方式需要不同的操作。
先来了解一下,什么是GitHub Pages。GitHub Pages有User/Organization Pages 和 Project Pages之分,具体的说明,请看说明。
下面图文说明,如何新建一个GitHub Pages
第一步:
第二步:
如果的repository的命名是yourname.github.io
这样的方式,你的GitHub Pages的域名就是yourname.github.io
,这就是User/Organization Pages。
如果你的repository的命名是projectname
,那么GitHub Pages的域名就是username.github.io/projectname
,这就是所谓的Project Pages。
没关系,both ok!
编辑hexo目录下的_config.yml
文件,配置一下几项:
修改URL项
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://syxiaqj.github.io #GitHub Pages域名
root: / #Project Pages 填 /projectname
permalink: :year/:month/:day/:title/
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
修改Deployment项
# Deployment
## Docs: http://zespia.tw/hexo/docs/deployment.html
deploy:
type: github
repository: https://... #你GitHub Pages的URl全路径
branch: master #如果是Project Pages,这里填gh-pages
重申一下,GitHub Pages分为User/Organization Pages 和 Project Pages,各位不要看错。
运行命令
1 2 | hexo generate
hexo deploy
|
上面的两行命令,等于下面一行命令
1 | hexo g -d
|
g
是generate
的简写,d
是deploy
的简写
在浏览器输入GitHub Pages的链接,如yourname.github.io
or yourname.github.io/projectname
,访问一下,我擦,怎么还是GitHub Pages的默认页。亲,不要着急,GitHub的部署会有最长10分钟的延迟,等会你再访问一下就好了。
OK,经过一番努力,用hexo这个框架搭建一个我们自己的博客终于搞定了。祝你在积累与分享的路上能够收获更多的东西!
工作之余,花了一周多的时间终于将hexo这个系列的东西整理完成了。一件事情完成,总是令人高兴的,就像自己把hexo搭起来的时候;亦或是第一篇博文写完,发布的时候。写博客的无疑是一件花时间的事情,但是在自己整理的过程中会有新的认识与理解,这非常好。
接下来有什么打算呢?最近正在学习一个开源框架Beeframework,会把我学习心得与成果整理出来。中间也会穿插一下Cocos2d-x的内容,游戏开发我也在学习
大家有什么问题,欢迎通过留言、微博等多种途径进行交流
]]>hexo是使用Markdown编辑文章的,我写的这些文章也都是用这种标记语言完成的。所以,我们先从Markdown说起。
你可以使用vim工具直接编辑md文件,也可以用记事本打开md文件编辑你的文章,也可以Markdown的编辑器编写,有很多在线的编辑器,何有不少客户端的编辑器,我是Mac系统,用的一个叫Mou的编辑器,还比较好使。Windows系统下,你可以自己找一下,应该也会有很好用的编辑器。
Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯和亚伦·斯沃茨。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML文档”。 ——维基百科
先简单介绍一下,Markdown的语法,具体怎么用,我相信大家一看例文就马上明白了。
1、分段: 两个回车
2、换行 两个空格 + 回车
3、标题 #
~######
井号的个数表示几级标题,即Markdown可以表示一级标题到六级标题
4、引用 >
5、列表 *
,+
,-
,1.
,选其中之一,注意后面有个空格
6、代码区块 四个空格
开头
7、链接 [文字](链接地址)
8、图片 ![图片说明](图片地址)
,图片地址可以是本地路劲,也可以是网络地址
9、强调 **文字**
,__文字__
,_文字_
,*文字*
10、代码 ```,``
下面来看看例文,你就马上明白,怎么来使用这些符号来写好一篇自己的博文了。
在线编辑器例文:传送门
Mou编辑器:下载地址
你先试试,用Markdown怎么去些自己的文章,有了例子,还是很容易上手的。
我们在前面的已经略微的接触了一些hexo的命令,如hexo new "my blog"
,hexo server
等。下面来介绍一下我们经常会用到的hexo命令
1、新建
1 | hexo new "my blog" |
新建的文件在hexo/source/_posts/my-blog.md
2、编译
1 | hexo generate
|
一般部署上去的时候都需要编译一下,编译后,会出现一个public
文件夹,将所有的md文件编译成html文件
3、开启本地服务
1 | hexo server
|
这个命令,我之前已经用过了,开启本地hexo服务用的
4、部署
1 | hexo deploy |
部署到git上的时候,需要用这个命令,下一篇中,我们会使用到这个命令
5、清除public
hexo clean
当source
文件夹中的部分资源更改过之后,特别是对文件进行了删除或者路径的改变之后,需要执行这个命令,然后重新编译。
以上这些都是我在使用过程中经常用到的一些hexo命令。最为详细、最为全面的说明文档当然还是在官网。请各位猛戳。
OK,下一篇介绍hexo这个系列的最后一篇文章《如何讲博客部署到git上》。
大家如果有什么疑问,欢迎通过留言、微博等多种途径进行交流
]]>light
主题为例,较为详细的了解如何优化自己的博客站点。
light
主题官网上对hexo主题的说明文档:传送门
|-- themes
|-- landscape
|-- light
我的目录结构,截图如下:
如上面看到的,有两个landscape
,light
主题,文件夹名称即为主题名称,还记得上一篇文章hexo主目录中的_config.yml
文件Extensions
部分中的theme:
参数吗,那个参数的值便于这里的文件夹名称对应,值是哪个,便意味着哪个主题得到了你的“宠信”(哈哈)。
hexo拥有丰富的主题供你选择:主题传送门
你可以手动下载其中的一款或者几款,然后拷贝到你的themes
目录下,搞定!
或者,你cd到themes
目录
1 | cd 你的themes目录
|
然后运行一下命令
1 | git clone 主题url
|
light
主题目录结构
|-- _config.yml
|-- languages/
|-- layout/
|-- LICENSE
|-- README.md
|-- source/
主题配置文件
语言目录,用于保存语言文件
布局目录,目录结构
|-- _partial/
|-- _widget/
|-- archive.ejs *
|-- category.ejs *
|-- index.ejs *
|-- layout.ejs *
|-- page.ejs *
|-- post.ejs *
|-- tag.ejs *
以上打*
的文件表示,每个主题至少需要这些文件。所有的主题都是用layout.ejs
作为默认的布局文件,你也可以自定义布局文件。
_widget/
: 小工具目录,在light
主题中对右边栏的控制。
_partial/
: 组件目录,给博客添加统计、评论等功能
hexo支持很多模板引擎,诸如EJS,Swig,Haml,Jade等,文件以什么后缀,即表示用的是哪个模板引擎,light
主题用的是EJS
模板。每种模板引擎的语法与使用,各位请点击链接查看,这里就不赘述了。
主题资源目录,主题用到的CSS、Javascript等文件需要放在这个目录中,会被编译到hexo的public
目录中。
如何进行编译,后面会介绍,我们先赶紧来优化一下自己的博客站点。
主题配置配置文件,介绍主要参数
menu: #站点导航栏 (标签: 路径)
首页: /
归档: /archives
关于: /about
widgets: #小工具 即站点的右边一栏 页面会按这里的顺序排列
- recent_posts
- category
- weibo_show
- blogroll
excerpt_link: 阅读全文 #默认是Read more 可以改成中文
twitter: #墙内很少用此鸟,so可以删掉
addthis: #这个也可以删掉
enable: true
fancybox: true
baidu_analytics: true #百度统计,天朝还是这个好使,没办法滴
google_analytics: #默认统计,多么希望用这个统计,可惜
rss: /atom.xml #RSS
comment_provider:
light
主题自带的是disqus,国内用户,当然不好使,还是用“多说”好。
1、先在多说注册
2、创建站点
3、完成后,在“工具”中,获取通用代码
<!-- Duoshuo Comment BEGIN -->
<div class="ds-thread"></div>
<script type="text/javascript">
var duoshuoQuery = {short_name:"用户名"};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';ds.async = true;
ds.src = 'http://static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0]
|| document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- Duoshuo Comment END -->
4、用下面命令打开comment.ejs
1 | vim themes/light/layout/_partial/comment.ejs
|
修改如下
<% if (page.comments){ %>
<section id="comment">
//多说通用代码
</section>
<% } %>
5、Over
虽然某度,我基本不用,但是某度的分享,大家都用,我也就用用。
1、打开百度分享,获取代码。记得进行下一步按钮设置,可以对是否设置页面分享、图片分享、划词分享、按钮类型、风格、图标大小等功能。
2、在themes/light/layout/_partial/
目录下,新建一个baidu_analytics.ejs
文件
1 | touch themes/light/layout/_partial/baidu_analytics.ejs
|
3、将获取的代码写入baidu_analytics.ejs
文件
4、在themes/light/layout/layout.ejs
文件中添加百度统计,添加到</body>
标记前
<%- partial('_partial/baidu_analytics') %>
1、到微博开发平台获取代码
2、在themes/light/layout/_widget/
目录下,新建一个weibo_show.ejs
文件,并且将刚获取的代码,写入该文件
3、在themes/light/_config.yml
文件中的widgets
中添加weibo_show
widgets:
- weibo_show
见上面介绍_config.yml
内容
1、在themes/light/layout/_widget/
目录下,新建blogroll.ejs
2、编辑文件
<div class="widget tag">
<h3 class="title">友情链接</h3>
<ul class="entry">
<li>
<a href="链接地址" title="title" target="_blank">显示名称</a>
</li>
</ul>
</div>
3、在themes/light/_config.yml
文件中的widgets
中添加blogroll
widgets:
- blogroll
见上面介绍_config.yml
内容
作为一个完整的博客站点,“关于”页是不能少的。下面,我们在导航栏上添加上这部分内容
1、新建一个页面
1 | hexo new page "about" |
2、编辑source/about/index.md
,至于编辑什么,您随意。
3、在主题的配置文件themes/light/_config.yml
中添加
menu:
关于: /about
见上面介绍_config.yml
内容
恩,好了,基本上能优化的东西,都加上了,你本地运行一下hexo generate
hexo server
,看看博客的效果,是不是有那么点样子了。
我们的博客,基本上已经搭建好了,但是现在我们只能在本地运行,别人访问不了,这可不行,我们的学习成果与经验是想要分享给朋友的,所以我们要把网站部署到git上。
先不忙,在部署到git上之前,我们先讲一点其他重要的东西,所谓“磨刀不误砍柴工”,下一篇讲《hexo命令以及如何用Markdown写文章》,这个系列的最后一篇,我们介绍如何部署到git,让别人能访问到我们的站点。
]]>light
主题为例,较为详细的了解如何优化自己的博客站点。
light
主题_config.yml
的相关参数,初步定义属于你自己的博客。我们开始吧!
主目录,简洁明了
|-- _config.yml
|-- package.json
|-- scaffolds
|-- scripts
|-- source
|-- _drafts
|-- _posts
|-- themes
全局配置文件,网站的很多信息都在这里配置,诸如网站名称,副标题,描述,作者,语言,主题,部署等等参数。这个文件下面会做较为详细的介绍。
hexo框架的参数,如果不小心把它删掉了,没关系,新建一个文件,讲内容写入文件,保存就OK了。里面的参数基本上是固定的,如下:
{
"name": "hexo",
"version": "2.4.5",
"private": true,
"dependencies": {}
}
参数也很容易理解,一看就明白,该文件基本上也不需要操作,就不多解释了。
scaffolds是“脚手架、骨架”的意思,当你新建一篇文章(hexo new 'title')的时候,hexo是根据这个目录下的文件进行构建的。基本不用关心。
脚本目录,此目录下的JavaScript文件会被自动执行。
这个目录很重要,新建的文章都是在保存在这个目录下的,有两个子目录:_drafts
,_posts
。需要新建的博文都放在_posts
目录下。
_posts
目录下是一个个markdown
文件。你应该可以看到一个hello-world.md
的文件,文章就在这个文件中编辑。
_posts
目录下的md文件,会被编译成html文件,放到public
(此文件现在应该没有,因为你还没有编译过)文件夹下。
网站主题目录,hexo有非常好的主题拓展,支持的主题也很丰富。该目录下,每一个子目录就是一个主题,我的子目录如下:
|-- landscape
|--
|-- light
|--
我装了两个主题,landscape
是我这个hexo版本的默认主题,我自己下载了一个light
主题。其实light
也是之前版本的默认主题。我使用的的light
主题。
你也可以自己下载主题放到该文件下,hexo主题传送门
主题目录下我们可以进行很多自定义的操作,诸如,给网站添加微博秀、添加评论组件、添加分享组件、添加统计等等,让自己的博客网站更丰富、有趣、实用。
themes目录结构及优化自己的博客,这些内容我会在下一篇博文中介绍。
_config.yml
文件的作用上面已经讲过了,下面先呈现以下_config.yml
文件中的内容,并对主要参数做简单的介绍
# Hexo Configuration
## Docs: http://zespia.tw/hexo/docs/configuration.html
## Source: https://github.com/tommy351/hexo/
# Site #站点信息配置
title: 浪花一朵朵 #网站标题
subtitle: 技术是海,深不见底;生活是洋,广不着边;而我如浪花,清澈透明并且舞动双手,仰望天空。 #网站副标题
description: 浪花一朵朵 #网站描述,网站上不会显示出来,但搜索引擎会用到改字段
author: 员员 #作者
email: syxiaqj@gmail.com #联系邮箱
language: zh-CN #语言,简体中文当然用zh-CN
# URL #部署到公网,信息配置,后面介绍如何将网站部署到git上时介绍此信息
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://syxiaqj.github.io
root: /
permalink: :year/:month/:day/:title/
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
# Directory
source_dir: source
public_dir: public
# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
auto_spacing: false # Add spaces between asian characters and western characters
titlecase: false # Transform title into titlecase
external_link: true # Open external links in new tab
max_open_file: 100
multi_thread: true
filename_case: 0
render_drafts: false
post_asset_folder: false
highlight:
enable: true
line_number: true
tab_replace:
# Category & Tag
default_category: uncategorized
category_map:
tag_map:
# Archives
## 2: Enable pagination #启用分页
## 1: Disable pagination #不启用分页
## 0: Fully Disable #完全不可见
archive: 1
category: 1
tag: 1
# Server
## Hexo uses Connect as a server
## You can customize the logger format as defined in
## http://www.senchalabs.org/connect/logger.html
port: 4000
logger: false
logger_format:
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: MMM D YYYY
time_format: H:mm:ss
# Pagination
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page
# Disqus
disqus_shortname:
# Extensions
## Plugins: https://github.com/tommy351/hexo/wiki/Plugins
## Themes: https://github.com/tommy351/hexo/wiki/Themes
theme: light #使用的主题名称
exclude_generator:
plugins: #插件列表
- hexo-generator-feed
- hexo-generator-sitemap
# Markdown
## https://github.com/chjj/marked
markdown:
gfm: true
pedantic: false
sanitize: false
tables: true
breaks: true
smartLists: true
smartypants: true
# Deployment #部署到公网配置,后面介绍部署到git上时再详细介绍
## Docs: http://zespia.tw/hexo/docs/deployment.html
deploy:
type: github
repository: https://github.com/syxiaqj/syxiaqj.github.io.git
先不要急于修改其他参数,我们文件中的第一部分Site
(站点信息),很容易改,还有主题,在Extensions
中的theme:
参数,这个参数的值就是hexo主目录中themes
(主题目录)下子目录文件夹的名称(主题)。
建议先设置成light
,因为我都会以light
主题为例做较为详细的介绍
好了,本地运行一下
1 | hexo server
|
浏览器访问localhost:4000/
,网站的标题,副标题等信息是不是都已经更改了!恭喜你,对自己的博客网站的简单的全局设置已经成功了。
下一篇会详细介绍一下light
主题,主题的目录结构,文件关联,并对网站添加更多有意思、并且也很实用的功能。
_config.yml
的相关参数,初步定义属于你自己的博客。我们开始吧!
]]>
搭建个人的静态博客网站,有很多优秀的框架,诸如jekyll,Octopress,WordPress等,当然这些我都没用过(哈哈)。我使用的是江湖号称“快速、轻量、易拓展”的hexo。
我把自己搭建博客的过程整理了一下,希望对需要的人有帮助(包括我自己)。硬件
说明一下,我用的Mac电脑,所以以下部分,都是在Mac上完成的。
关于什么是hexo,我想引用作者的一段话:
Hexo is a fast, simple and powerful blog framework. It parses your posts with Markdown or other render engine and generates static files with the beautiful theme. All of these just take seconds.
简单、快速、易拓展,非常具有吸引力。
安装hexo是非常简单的,但是在安装hexo前,需要先安装一下所需要的环境。安装Node.js和Git
这个在官方文档上又比较详细的说明hexo document,这里就不在赘述了。
不过我在安装Node.js过程中还是遇到了问题,对于没有接触过Node.js的小白来说,遇到这样的问题总是很蛋疼的,没办法,只能求助于了解Node.js的大神,结果帮人家帮我搞定了,万幸。
虽然我无法准确的说清楚是什么原因,但是大概是两个方面的原因:
1、安装node.js的版本不对
2、环境变量有问题
运行下面命令
$ npm install -g hexo
如果Git、Node.js安装正确,安装hexo,是非常easy的,轻松愉快搞定。如果报错,大概是环境安装有问题。
成功安装了hexo后,我们要怎么使用呢,我看下面。
1、初始化hexo init <folder>
,<folder>
就是路径,执行完后,去看看该路径下的文件夹,目录大概是这样的
2、运行如下命令hexo server
3、浏览器访问localhost:4000/
看看,恭喜你,已经有一篇博客已经出现了(默认会有一篇“Hello World”的博文)
至此,用hexo在本地搭建自己的博客,已经完成了。后面会根据我自己的理解,介绍一下hexo的目录结构,如何使用主题、插件,如何将博客部署到git上等内容,今天就到这里了!
]]>搭建个人的静态博客网站,有很多优秀的框架,诸如jekyll,Octopress,WordPress等,当然这些我都没用过(哈哈)。我使用的是江湖号称“快速、轻量、易拓展”的hexo。
]]>
这个工具在2011年就有了,我是刚刚知道,尝试着使用了一下,感觉很棒。下面就记录从安装到使用的过程:
第一步:
1 | sudo gem install cocoapods
|
第二步:
1 | pod setup |
以上两步都会比较慢,第二步特别慢,请耐心等待。第二步的时候是在下载数据,你可以到~/.cocoapods
目录下,查看下载进度du -sh *
。
第一步:
在项目根目录下创建一个名为Podfile的文件
1 | touch 项目根目录/Podfile |
第二步:
将需要用到的库名称写到文件中,以SDWebImage
和JSONKit
为例:
在编写Podfile之前,先来看看CocoaPods中有没有这两个库,需要用pod search
命令搜索一下,
1 | pod search SDWebImage |
然后看到这样的信息,
1 2 3 4 5 6 7 8 9 10 | -> SDWebImage (3.5.2) Asynchronous image downloader with cache support with an UIImageView category. pod 'SDWebImage', '~> 3.5.2' - Homepage: https://github.com/rs/SDWebImage - Source: https://github.com/rs/SDWebImage.git - Versions: 3.5.2, 3.5.1, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.7.4, 2.7, 2.6, 2.5, 2.4 [master repo] - Sub specs: - SDWebImage/Core (3.5.2) - SDWebImage/MapKit (3.5.2) - SDWebImage/WebP (3.5.2) |
这就说明这个库存在,看到pod 'SDWebImage', '~> 3.5.2’
这句了吗,复制一下,等会会用到。同理,JSONKit也可以这样查看一下相关信息。
好了,现在我们可以编写Podfile文件了,文件的具体格式如下(记事本打开还是vim打开,各位请随意):
1 2 3 | platform :ios pod 'SDWebImage', '~> 3.5.2' pod 'JSONKit', '~> 1.5pre' |
注意:platform :ios
,冒号前后,前面有空格,后面没有空格,否则会出错的。
第三步:
先cd到项目根目录,执行下面命令
1 | pod install
|
到此基本上就OK了。打开项目根目录瞧瞧,是不是有点不一样了,目录结构大概是这样
然后用.xcworkspace打开工程就OK了
更改了Podfile文件,就需要重新运行一下这条命令pod install
1、在项目工程中无法引用类库
你发现了吗?你想使用#import "JSONKit.h”
,发现根本没有,你试试#import <JSONKit.h>
,这个应该是可以的,而且在程序中也能使用了,完全没问题。但是对于优点强迫症的我,还是需要引号也能引用类库。具体的办法如下:
在项目工程的targets中,不是pod工程,Build Setting -> User header Search Paths
,新建一个path${SRCROOT}
,并且路径选择为recusive
,然后你再试试#import "JSONKit.h”
,应该没问题了。
2、执行pod install
后,出现这样的提示:
[!] The target `project name [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
感觉不是每次会出现,我第一次的时候出现这样的提醒,你可以参考这里
3、执行pod
命令时,总是出现这样的一个错误
1 | /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin13/rbconfig.rb:212: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040707 |
答案尚不知
参考文章:
《使用CocoaPods来做iOS程序的包依赖管理》
《CocoaPods安装和使用教程》
《CocoaPods 出现 OTHER_LDFLAGS 错误的解决方法》
在使用过程中,再遇到情况,会持续更新
]]>]]>
从此开启博客,在这里记录自己的学习与生活。希望若干时间以后,回头看看,还能记起当初的时间花在哪里了。
第一篇博文,就说说这个博客的诞生与打算吧。
时间老人,从来不曾停下自己的脚步。看似也比较努力的人,当自己坐下来想想,做成过什么事情的时候,却也乏善可陈。我想,我应该把自己的的学习生活,记录一下了。特别作为一名技术人员,技术的积累也非常重要。就像计算机的内存毕竟有限,大量的数据还是需要借助硬盘来储存下来一样,大脑虽然还是,却也“好记性不如烂笔头”。
现在各大门户与一些专门的博客网站上去建一个自己的博客,也是非常方便的。自己搭建一个博客,有麻烦有费事,为什么呢?作为一名技术人员,当然希望玩一玩新鲜的技术(利用开源框架搭建自己的博客,也已经不是什么特别新鲜的东西了,只是对于我来说,这是第一次尝试),这也算一种探索精神吧。能自己动手建立一个自己的博客,用shell工具写博客,用命令行发布博客,这是一件多么cool的事情。有种黑客的赶脚,瞬间就高大上了,有木有。这才是能体现干技术的价值嘛!
先对这个开源框架的作者tommy351崇拜一下,来自海峡对岸,据说是位大学生。至于hexo到底是个什么,我只知道是个基于node.js搭建静态博客的开源框架,江湖传言它快速、简单、功能强大。虽然我也没用过jekyll、Octopress、Wordpress,但是大家用过都说hexo好,我想,那就它了。链接:hexo官网
问题一,node.js安装有问题。作为一个ios开发人员,对于node.js毫无概念,虽说只要安装一下node就好了,安装包也能下载,但就是安装有问题,在install hexo的时候,一直报错。这个问题折腾了我很久,后来让服务端懂node.js的大哥,帮我卸载重装了。
问题二,上传git后不会使用git pages,主要也是没有用过,现在基本上会用了。
问题三,hexo的文件结构尚不是很清楚,当然主要也是刚开始用,想自己改改页面布局的时候,就有点不知所错了,生怕改错点什么。
这里就不再赘述了,下次会好好把所有的问题都整理一下。
对于我这样的小白而言,能把这个博客搭建起来,是离不开别人的帮助的。网上的资料,主要来自zippera,感谢他的分享。对于小白而言,有时候其实是看不懂资料的,很多不懂的问题,都问一个人称“刘指导”的吉姆,非常感谢他的耐心指导。还要感谢,单位的胖子,帮我搞定node.js的安装。
这个博客,还是以写技术为主,打算能每周更新一篇技术博文。希望能坚持住!
大家都叫我员员。
一直是个技术的小白,曾经不知道技术为何物,甚至不敢在电脑上装QQ(看观莫笑),第一堂程序课,找不到老师说的“输入”在哪,很久以后才知道原来,就是控制台打一行代码cin>>a
。
现在做iOS开发,却深感技艺不精,所以要努力学习。
关注社会时事热点,听别人的意见,并且有自己的判断。明白,生存是最基本的奋斗目标,当然,心存诗与远方。
技术是海,深不见底;生活是洋,广不着边;而我如浪花,清澈透明并且舞动双手,仰望天空。
加油!
]]>从此开启博客,在这里记录自己的学习与生活。希望若干时间以后,回头看看,还能记起当初的时间花在哪里了。
第一篇博文,就说说这个博客的诞生与打算吧。
]]>