写在前面

博客迁移好多回,数据备份好多遍,索性不再折腾了。
目前用 UlyssesMedium 配合起来工作,不能再赞。

iOS开发有些年头了,除了一些私人库,一直没写点像样的总结。
赶在swift3.0 发布之前,辞旧迎新,做个全面总结,也算对自己做个交代。

核心大纲如下,后面会做适当调整。

  • objective-c 源码
  • runtime 源码
  • foundation 框架源码
  • swift 3.0 源码

补充: oc底层源码使用c c++编写, 需要了解基本语法。

git下载源码 更新版 官方版

两个版本源码库,都基于objc 680版本,前者在官方版的基础上,修复了一些编译问题,加入了调试target。同时与官方版的项目结构同步,后期逐步完善源码注释。

#项目clone成功后。直接运行objc.xcodeproj即可。
#更新版本
git clone git@github.com:phnessu4/objc-runtime.git
#官方版本
git clone git@github.com:opensource-apple/objc4.git

阅读源码,可以加深了解底层实现设计,如果看oc代码不能满足你的好奇心。这时可以用clang将oc代码转换为c++实现,让你着手于更深层次。

# 正常转换
clang -rewrite-objc class.m

# 个别系统sdk指定,waring屏蔽等等。复杂使用请参考clang手册。
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk class.m

clang -Wall -pedantic -Wextra -rewrite-objc -c class.m

举例class.m

#include <objc/NSObject.h>
@interface OCObject : NSObject @end
@implementation OCObject @end

需要注意的是,虽然class中的只有一个类定义,转换结果,代码中系统定义占据了大半部分。

转换结果太长,代码详见git gist

补充阅读:objective-c中的block的c语言实现及 clang rewrite


最近开发新项目,因为要合作开发, 就放弃了自己开发的框架。使用当下如火如荼的Laravel。看了看 中文文档 英文文档,就直接本地部署了。

mac系统,现成的mamp环境,框架安装需要composer。

//本地环境,安装composer
vim ~/.bash_profile
alias phpmamp='/Applications/MAMP/bin/php/php5.4.10/bin/php'
curl -sS https://getcomposer.org/installer | phpmamp
sudo mv composer.phar /usr/local/bin/composer
composer

//修改写入目录权限
chmod -R 777 storage
chmod -R 777 bootstrap/cache
rm -rf .env
cp .env.sample .env

//生成应用key
php artisan key:generate

值得一提的是,Laravel 使用的是 PHP dotenv,作为env环境文件进行配置。

为了环境切换和部署方便,我单独写了一个deploy.sh脚本, gist 查看

#脚本应放置在。 框架安装目录/bin/deploy.sh 
#部署开发环境
bash bin/deploy.sh development

#部署正式环境
bash bin/deploy.sh production

Hey there~morning~

Jason Han

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store