2013年3月23日星期六

iBooks Author - 3D Model

http://iosdevelopersnote.blogspot.com/2012/01/ibooks-author-3d-model.html



iBooks Author - 3D Model

這篇文章是前篇 Apple Education 文章的延續,來探討一下 iBooks Author 中的加入 3D 物件的功能。也就是 Widgets 裡的 3D,請看下圖紅色框框之處。

當我們按下之後,很可能會看到底下的圖面
中間有個像原子軌道的畫面就是 3D 物件要呈現的地方。確定有選好這個物件,接著按下右上方的 inspector。就會出現可以選取的視窗,如下。
當然是選取 3D File 旁的 Choose... 按鈕啦。但先在這等等,我們從那裡生出來 3D File ?看一下這篇 Apple 的教學 我們發現需要一個 3D 的工具來輸出 dae 檔。dae 檔其實是 COLLADA 這個組織規範的檔案格式,也是大部分畫 3D 的工具都會支援的格式,我們查一下 wiki 會列出有那些工具。
Software tool
Application
  • ArcGIS
  • TNTmips
  • Google Earth - (release 4) has adopted COLLADA (1.4) as its native format for describing the objects populating the earth. Users can simply drag and drop a COLLADA (.dae) file on top of the virtual Earth.
  • Google SketchUp Pro (or any version of SketchUp starting with 8.0) can also be used to create .KMZ files: a zip file containing a KML file, a COLLADA (.dae) file, and all the texture images.
  • Mac OS X 10.6's Preview allows opening collada files for viewing in 3D.
  • OpenSimulator
  • Second Life
就請讀者挑自己喜歡的,下手。筆者呢就以 Google SketchUp 當做例子介紹,除了它是免費的之外,它還有warehouse 可以直接使用很多別人畫好的 3D 物件。它還有很多教學有興趣的朋友不妨試試。畫好自己的 Model 之後可以直接在 SketchUP 輸出成 dae,首先如下選擇 Export -> 3D Model
然後會跳出視窗,選好 dae
之後回到 iBooks Author 選到此 dae,如下。
圖形可能會怪怪的,不過直接透過 Preview 在 iPad 用手指動看看,就會是一個可互動的 3D 物件。如下在 iPad 上的畫面

ARC实践

http://iosdevelopersnote.blogspot.com/2012/08/arc-automatic-referece-couting.html

討論的對像是針對 @property 這個應用,不同的對象應該用那一種修飾
  • 數值型別 -assign
@property (assign) int numbers; @property (assign) CGPoint center;
  • id 或者說物件型別需要被 retain 的物件或者說在 object graph (註1) 中向下參考的物件 - strong
in Car.h@property (strong) Engine * kernel;
  •  應用 Protocol 的物件或是在 object graph 中向上參考的物件 - weak
in Engine.h@property (weak) Car * owner;  // 向上參考的物件
          @property (weak) id<SomeDelegate> delegate ; // delegate 的應用
  • Block 物件 -  copy
 typedef  void (^BlockType) (int a) ;
@property (copy) BlockType someBlock;
  •  IBOutlet 大部分是 weak 只有最上層的 IBOutlet ( View Controller 的 view )是 strong
Bridging - C 型別 (Core Fundation ) 以下簡稱 CF 和 Objective-C ( Foundation ) 以下簡稱 F 型別轉換時,有關記憶體管理應該注意的地方

  • __bridge - 沒有改變 retain count (注意是有兩個下底線),可以適用在 CF 轉 F 或是 F 轉 CF
  • __bridge_transfer - 用在 CF 轉 F 的時候,會將 CF 的 retain count 減 1
  • __bridge_retained - 用在 F 轉 CF 的時候,會將 F 的 retain count 加 1
我們來看幾個例子
ARC 寫法 - __bridge_transfer 
id obj = (__bridge_transfer ) cf; // 預設是 __strong id obj ;
換成 non-ARC 的寫法的時候是 
id obj = (id) cf;
[obj retain];  // strong 的關系
[(id) cf release]; //transfer 的關系

ARC 寫法 - __bridge_retained
id obj = [[NSObject alloc] init];
void *cf = (__bridge_retained void *) obj;
換成 non-ARC 的寫法的時候是 
id obj = [[NSObject alloc] init];
void * cf = obj;
[(id) cf retain];
此寫法通常最後會加上一個  CFRelease(cf) 來保持 retain count 平衡 
另外有兩個方便的 function 可以用

CFTypeRef CFBridgingRetain(id X) {
     return (__bridge_retained CFTypeRef)X;
}

id CFBridgingRelease(CFTypeRef X) { 
    return (__bridge_transfer id)X;
}
id obj = (__bridge_transfer ) cf;
可以改寫成
id obj =CFBridgingRelease(cf);

void *cf = (__bridge_retained void *) obj;
可以改寫成
void *cf = CFBridgingRetain (obj);

xcode 里的 git

Xcode 自動對這個資料夾做了 git init 的動作了。我們再用
git log
來看看 Xcode 做了什麼事,會得到
commit 823888353b2d6d19426b56658b90db86f2f2ab8a
Author: chronoer
Date:   Wed Jan 2 19:17:17 2013 +0800
    Initial Commit 
Xcode 己經幫我們把 Single View Application 的檔案都加入給 git 管理並 commit 目前狀態為歷史的節點了。
接下來我們要看一下git 的狀態用
git status
會得到如下的結果

# On branch master
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
# GitPractice.xcodeproj/project.xcworkspace/
# GitPractice.xcodeproj/xcuserdata/
nothing added to commit but untracked files present (use "git add" to track)
原來 Xcode 預設沒有把這兩個資料夾加入 git 管理。那到底我們需不需要這兩個資料夾裡面的東西加入呢?當然是不需要,這些都是 Xcode 的衍生物和源始碼沒有太大的關係。好,那就這樣放著不管嗎? untracked files,如果之後有新增的 file 是想要加入 git 管理,又忘了加入,這樣就會和這兩個資料夾被列在 git status 的結果,一旦檔案多了,就會把真的想要加入和不想加入的搞混了,好像不怎麼好。git 有沒有方式可以設定,不想要 git 管理又不要出現在 untracked files 這邊的方法?有。要新增一個檔案名為 .gitignore。
所以我們新增 .gitignore 和 .git 同一個目錄下。內容如下

*.xcworkspace/
xcuserdata/
對應到上方紅色的兩個目錄。接著我們要把新增的 .gitignore 加入 git 管理然後 commit 做一個歷史記錄如下輸入
git add .gitignore
然後 commit
git commit .gitignore -m "add ignore file"
這樣一來,再做一次
git status
就會看到
# On branch master
nothing to commit (working directory clean)
這樣 git 穩定的狀態
除了這兩個資料夾,還有沒有要忽略的?有的。
那是哪些?其實我也是從 github 裡找到比較有名的幾個 project 來參考的。如下列出來給大家參考

.DS_Store
.localized
# Build directory
build/
# XCode user specific files
xcuserdata/
*.xcworkspace/
*.mode1v3
*.mode2v3
*.perspectivev3
*.pbxuser
output
可以當成一個 Xcode project 用 Git 要忽略的範本了。請加到 .gitignore 。

How To Use Git Source Control with Xcode in iOS 6

http://www.raywenderlich.com/13771/how-to-use-git-source-control-with-xcode-in-ios-6



本教程是由
马利克特拉贝尔西,突尼斯一个充满激情的iOS开发者主要集中在手机和网络技术。
无论你是一个单独的开发人员或工作在一个团队中,如果你不使用源代码管理您的项目,你应该。
源代码控制是惊人的,因为它可以帮助你更轻松地恢复到旧版本的代码,看看如何改变你的代码已经随着时间的推移,作为一个团队工作。一个最好的源代码控制系统内置在Xcode中 - 混蛋!
Git是一个分布式的版本控制系统,最初由Linus Torvalds,Linux内核的发展的主要力量。Git的美好的事情是没有任何中央资料库 - 每个人都可以有自己的看法的代码,并拉出从其他来源的变化。
在本教程中,您将拿到手的经验与git,并学习如何使用它内部直接Xcode中,在命令行中,甚至如何将您的Xcode项目Github上,网上流行一种git仓库。本教程是完全更新为iOS 6,涵盖的Xcode 4.5中引入的新的Git功能。
因此,事不宜迟,让我们的Git

Gitting开始

而不是絮絮叨叨的git的理论,我们要潜水的权利,并尝试一下。我们将创建一个新的Xcode项目,并尝试Git源控制的某一天到一天的基础上,你通常会做一些典型任务。
所以火起来的Xcode,创建一个新的项目,或去FileNewProject,挑选单一视图的应用程序模板从iOSApplication“菜单,并点击Next。
启动新项目
现在,填写在模板选项如下:
  • 产品名称:GitUseExample
  • 公司标识符:正如它的名字所表明的,这是你的公司标识符,如果你有一个。否则,键入什么的。
  • 类的前缀留空。
  • 设备系列:iPhone
  • 使用情节图板:选中此
  • 使用自动引用计数:这也
现在单击“下一步”。下面的对话框,让你选择在哪里保存你的项目。选择的位置,确保“创建这个项目的本地git仓库”,然后再单击“创建”按钮。一旦你这样做,单击“创建”按钮。
检查的Git仓库
通过检查,Xcode将创建一个空的Git存储库,并使用您第一次提交您的新项目的基础上。嗯,这正是我们想要的!
版本数据库
所有的源代码控制系统,包括Git中,将其数据存储到存储库,让他们可以管理您的项目版本,并跟踪整个开发周期中的变化。因此,认为存储库的数据库版本。
在你的项目上工作的过程中,您将添加文件,修改代码,并改变你的项目很多次。
当你犯了一个大的变化,是一个“已知良好”的状态(通常是每天一次或更多次),这是一个好主意,检查你的修改到版本库。这样一来,你有“已知良好”状态,您可以随时恢复到创纪录的。
但有关的代码已经在我们的项目中,这是由项目模板创建?看看下面的屏幕。
你的项目仍是空白,因为你没有更改,你不需要承诺。但是,基本上,Xcode的增加和犯了几个文件,当您创建您的项目。犯下最初的提交由Xcode会自动执行:]
让我们来看看,单击管理器图标的右上角。
组织者
在出现的窗口中,切换到存储库。
如果你看一下在左侧,您可能会注意到Xcode中已检测到一个新的项目库,并把它添加到列表中。
点击它,你会看到新的文件添加到空白项目和Xcode的指示,进行提交操作的一个典型提交的所有细节:]
现在,在你的文件,尝试做一些改变。例如,打开AppDelegate.m及以下的应用:didiFinishLaunchingWithOptions:委托方法:
-  BOOL 申请 UIApplication的* 应用didFinishLaunchingWithOptions NSDictionary中  *  launchOptions
 {
 
    告诉NSLog @ “应用程序没有完成发射”  ;
     / /覆盖点进行定制应用程序启动后,
    返回 YES ;
 }
当您保存文件时,你会注意到,AppDelegate.m,现在有一个“M”徽章下的文件名:
“M”徽章代表“修改”。具体来说,它意味着你已经修改了文件,但尚未签入本地Git仓库的变化。
在提交前,让我们快速添加一个简单的UIButton的视图控制器文件和您链接到该按钮的方法。这只是说明你会得到不同的状态指示灯的源代码控制。
选择MainStoryBoard.storyboard和从对象库中拖动一个按钮到屏幕上。更改按钮的显示的文字到任何你想要的如下面的截图所示。
现在,切换到ViewController.h“ 取而代之的是以下:
#导入
 
@接口的ViewController 的UIViewController
 
-  IBAction  clickTheButton“ :ID 的发送者;
 
@结束
切换到ViewController.m,并添加以下代码来实现的方法,你只是在头文件中声明:
-  IBAction  clickTheButton的ID 发送者{
 
    告诉NSLog @ “这是一个Git教程”  ;
 
}
做的最后一件事是链接按钮的方法。切换回MainStoryBoard.storyboard,请单击“视图控制器的视图控制器现场,并从连接督察(最后一个选项卡的右侧栏)点击clickTheButton:收到的动作“面板,将其拖动到故事板编辑器中的按钮。然后选择“触摸里面”,从弹出的列表。
如果你检查项目浏览器中,你会发现,3的文件,ViewController.h,ViewController.m MainStoryboard.storyboard,状态的改变显示的M徽章。那是因为你只是做了修改这些文件。
建立和运行,以确保该项目的工作,当你按一下按钮,你看:“这是一个Git教程”消息记录到控制台。
从控制台日志输出
w00t - 现在我们有一组代码中的“已知良好”的状态,它的时间作出承诺!

做一些承诺

提交文件很简单 - 简单地去FileSource ControlCommit。
承诺
一个新的窗口将显示,类似于以下内容:
正如你可以看到,屏幕被分成两个。左边的窗格显示其当前状态的文件在最后一次提交以来所做的所有更改。因为这是您第一次提交,你将看到所有的项目创建以来所做的更改。
在右窗格中显示的文件,然后再进行更改。
之前和之后
在代码窗格,请注意蓝色的选择。这表明添加的代码。即使你添加一个空行或空格,Xcode的假设,这是一个变化,表明它与那些蓝色的选择。
自己尝试一下:点击“取消”按钮,回到ViewController.h,按“Enter”键,作出新的行(或几个)。然后去FileSource ControlCommit,你应该看到的结果如下:
承诺的例子
这可能是有点明显,,但Git不小心跟踪每一个变化,使整个开发周期。
让我们更深入地了解在该屏幕上,看看有什么Xcode中已经为我们准备的。
左边的窗格显示您的项目文件,你可以看到这些文件,您只需修改与M状态。Xcode中,默认情况下,检查所有的文件与M状态和假设您要提交所有的人。
如果你想消除一个或多个文件被提交,你只需要简单地取消它。
在Xcode 4.5的一个新特性是除丢弃的文件在列表中取消选中,你现在在一个特定的文件,该文件承诺和不发生变化时变化的基础上作出决定!
这就是所谓的“樱桃采摘”的变化。让我们尝试一下吧!
在文本编辑器中,所有的修改所列举的Xcode。如果您滚动编辑器,你将看到的变化,1,2等,在上面的截图所示。
每一次改变都被选中,默认情况下,对不对?所以,要消除从正致力于一个特定的变化,只是取消它。
例如,改变是不是很重要,因为它是一个空行。因此,取消选中的一个,这样的变化没有签入。
请注意,该指标已变成灰色,明确表示,改变目前不包括在提交过程中。
在同一个文件中排除个别变化的另一种方法是,点击旁边的箭头换号。会出现两个选项:“提交”(或“不承诺”的情况下,被选中的变化)和“放弃更改”。在这种情况下,你只需要选择“不承诺”。
这是一个非常有用的新功能。在旧版本的Xcode,如果你要排除的方法从一个提交,你必须把它从你的代码!这是很烦人的,所以这个新的方法为您提供了更多的灵活性。
现在,让我们的承诺,其余的变化。在此之前,请务必在屏幕的底部进入一个提交信息。这可以帮助您更好地了解各组的变化包含一目了然。
添加一个提交信息的git在Xcode
然后点击“提交”。恭喜你,你有你的第一个承诺!如果你去回至组织单位,单击“刷新”,你应该看到您的新的提交日志中:
一个Git在Xcode的组织者提交日志
这个简单的程序(进行修改,然后提交他们),你会做90%的时间。很容易,不是 - 所以你没有理由不这样做!:]

妖异

另一项新功能介绍,由Xcode 4.5,允许你提交你的更改到一个特定的分支。
但是,且慢 - 什么是分支?
其实,相信与否,你已经在使用的一个分支。当它第一次创建时,你的项目关联的一个分支,称为“主”。由Xcode会自动创建这个分支,正如它的名字表明你的项目,是主要的分支。
“但是,什么是一个主要分支?”,你可能会问。嗯,好吧。来看看下面的图片:
基本上,主分支应该始终保持你的项目的主副本。所以,当你工作的一个项目,主通常应该指的发行版本。
但是你可以有其他分支机构。一个很好的用途是跟踪实验性的新功能,还没有准备好主线的分支。
例如,让我们说你要添加一个新的地图功能,为您的应用程序,但它没有完全准备好为生产。为了模拟这种情况,创建一个新的派生类从NSObject和它命名为MapForIternerary。在这一点上,你的项目可能看起来像这样:
添加到Xcode项目的文件,但尚未提交
请注意这两个新的的文件MapForItinerary.h和MapForItinerary.m的状态为“A”。这表明一个新的文件,该文件还没有被提交到版本库。
现在,文件/源代码控制,/提交切换到文本编辑器。
一个新的文件提交到Git
如果你选择了一个与A状态的文件,您可能会注意到Xcode中没有提供任何早期版本比较。这是因为该文件已被提交到存储库中,所以没有什么比较。
好了,你加了2的的文件(MapForItinerary.h,MapForItinerary.m)的项目 - Xcode中检测到,并准备提交。但是,您可能需要分配到另一个特定的分支,这些新的变化,处理。这将有助于隔离风险的情况下,也存在一些问题与新地图代码,我们将在后面讨论。
好消息的Xcode 4.5,这是很容易的。点击“提交4个文件”按钮,点击“提交分公司”按钮。这个对话框会出现:
默认情况下,Xcode中选择“master”分支的分支承诺。让我们切换 - 点击它,弹出一个对话框,在资源库中​​的其他分支,你可以承诺。
糟糕,没有分支,但主。好了,单击“新科”,以创建一个新的和把它map_feature。
单击“创建”分公司“按钮,你会发现现在的XCode切换到您刚刚创建的新的分支。
现在,我们切换到我们想要的分支,上面显示在同一窗口中,单击“提交”按钮。
现在该怎么办?哦,是的,我们失去了一些东西很重要。在每一次提交操作中,你必须发表评论消息。评论是强制性的,因为他们帮助你的情况下,你回看这是什么提交所有有关:]
在这里,我们提交的是周围的地图功能,可以随意写一些有意义的事情你以后需要的,类似“新的地图功能开始工作,没有完全完成。”
一旦完成后,单击“提交”按钮。您已经选择了“map_feature”分支,所以不需要选择“再次提交到分支”选项。
不要等到了一个肯定的消息从Xcode。相反,如果一切顺利,你会不会得到errror的信息,最重要的,你会看到一个清除几乎所有的地图文件的状态。这是因为Xcode中增加了你提交这些文件。
Git的状态徽章在Xcode中清除
此外,您现在可以看到新的分公司主办。选择分行图示:
分行图标
然后你就可以翻转的两个分支之间的提交日志:
在Xcode的分支日志

打了退堂鼓

比方说,你的工作在最新版本到您的项目中,添加代码,建设等方面。但现在看来,你已经采取了某个地方转错,该项目不编译,并引发了很多的错误。在这一点上,你可能要恢复的最后一个版本,从源头控制,并重新开始。
badstableversion
Git提供这种项目备份:]
让我们试试吧。转到MapForItinerary.h,并做一些更改,以使它看起来像这样:
#导入
 
接口 MapForItinerary  NSObject的
 
- 无效 fakeMethod; / /这是一个假的方法,只是为了让丢弃的行动,明确
 
@结束
取代MapForItinerary.m看起来像这样:
#导入“MapForItinerary.h”
 
@实施 MapForItinerary
 - 无效 fakeMethod { / /这是假的只是为了让丢弃的行动,明确的方法
 
    告诉NSLog @ “弃变化,让你得到你完成了它的最新版本。”  ;
 } 
@结束
您会注意到,修改后的文件的状态已经改变为M,这意味着本地修改的文件,并等待提交。
在这一点上,你可以选择放弃您所做的更改的文件。选择在项目导航MapForItinerary.h的,,然后去,以FileSource ControlDiscard变化。
的提示会出现,询问您是否真的要放弃所做的更改到该文件。
点击“放弃更改”按钮。您应该看到的代码,你刚才添加的消失!这是非常有用的,当你添加了一些变化,但他们没有工作,你想要得到的最后一个已知的良好状态。
除了放弃整个文件的价值的变化,你可以放弃个人的变化,以及由于在Xcode 4.5的一个新特性。
由于这点,MapForItinerary.m还是应该有“M”变化就可以了。进入到FileSource ControlCommit,并找到改变MapForIternerary.m。点击徽章在中间,然后选择“放弃更改:
放弃Xcode的提交界面的变化
会出现一个提示窗口,单击“确定”,这种变化应该会消失。如果你想取消你的行动,按CMD + Z。轰 - 改变走了!继续前进,进入一个日志消息,并完成提交。
现在,你已经尝试了“放弃更改”,你可能不知道之间的区别在于,“不承诺”选项,我们选择。
这是真的,这两个选项导致的变化不推到存储库,但是是有区别的:
  • 不承诺,让你跳过的变化,因此,它不会被提交的其他变化,但它会留在本地源代码。
  • 放弃更改不仅跳过了变化,但它也将删除从本地源代码。

所有的修改都属于我们

每次你提交你的更改到一个或多个文件时,Xcode创建了修改,给它分配一个ID,表演者(谁犯什么)的名称以及日期和时间。
这帮助你很多,只要你在你的开发进度,因为在某些时候,你可能需要记住哪个版本包含一个特定的变化。
Xcode中使得它很容易看到你的所有项目修订。,刚去到WindowOrganizer或单击右上角的按钮工具栏上的。
组织者
在“管理器”窗口中,切换到“资料库”选项卡。您应该会看到这样的事情:
信息库
在左侧边栏,你会看到所有你的Xcode项目的列表。滚动到你的工作(或有兴趣),并点击它。
在屏幕上方可以看到,在主窗格中会显示您所做的所有修订版本的代码在你的开发从最近的最古老的。
要查看详细信息,每个修订版本(所有提交的行动等),扩大的修订标题旁边的显示三角形。您应该会看到的扩展视图象下面这样的:
Git的显示的致力于这个修订版中,您提交的文件名的文件。
点击“查看更改”按钮。如下图所示,你会得到一个新的屏幕。
这是理想的方式来查看每个文件所做的全部更改。注释窗格的底部还可以帮助您识别的变化,也许,你为什么让那些摆在首位的变化:

时间旅行

丢弃变化是一个很好的方法来恢复到工作代码和节省您的时间。然而,它可以是在某些情况下,一个小的限制。
让我们回到了一会儿提交操作。提交可以让您保存多个修订版本,每个版本都有特定的变化为您的项目。所有这些都存储到存储库,为您的Git管理。
如果你选择放弃对文件所做的更改,这将会给你的最后一次提交的版本的文件,只有最后。这实际上是限制所在。
比方说,您的项目库包含了多次修改,随着时间的推移,你想要得到一个特定的文件的第一个或第二个版本,但不一定是最后一个。放弃更改不会给你。但是,有一种方法可以很容易做到的Xcode和Git。
选择你想要恢复到以前的版本从Project Navigator的文件。比方说,ViewController.m,然后去到ViewVersion EditorShow文本编辑器。(或者,您也可以点击第三个按钮下的Xcode窗口右上角的工具栏上的编辑器部分)。
版本编辑器被分成两个窗格。
这可以让你比较两个版本选定的文件。在我们的例子中,两个版本的ViewController.m比较是基于时间线,所以请单击时间轴浏览器图标(下面的截图),以显示它。
现在,你可以向上和向下的时间轴使用您的鼠标光标选择你想要的版本要回。
例如,最早的版本的ViewController.m文件,如上面的图片所示,决心在第三次2012年7月。如果是你正在寻找的版本,那么只要点选指标的修订,在右侧的编辑窗格中打开的特定版本:
现在,恢复该文件的版本,只是从右边的编辑窗格中的内容到左边的一个拷贝。就是这么简单!:]
另一个有用的功能,这是很好的了解,是追溯视图。这种观点可以让你轻松地捕捉每一次提交您的文件,在真实的时间,这样就可以区分哪些提交处理每个修订。
让我们切换到的怪视图中,单击底部的Xcode窗格中的的非视图图标上。
下面,你会得到这样的事情。
选择你想要的文件以查看​​其承诺,例如,从项目导航“窗格中ViewController.m。
在右边的侧边栏,你可能会发现所有的承诺你做了这个文件。其实,怪的看法是最好的方式看到所有的承诺从不同的版本,涉及到一个特定的文件,合并在一个地方。
滚动你的观点看,所有提交标有日期和意见。要围绕一个坚定的变化中看到更多的细节,按下信息按钮,旁边的日期,你会看到这种变化属于,谁也改变同一版本的变化及其他最终文件的版本ID。这是比要的组织者和您的项目库中寻找这样的变化,是不是?:]

分支:隔离风险

在前面的部分,我们谈到了分公司和如何提交到一个特定的分支,除主。基本上,Git允许你在多个数据流的修改和这些不同的数据流,被称为分支。你的工作项目的主要代码被称为主干。因此,当你工作的一个项目,你可能会岔开开发流从树干到第二个分支 - 有点像一棵树。
通常情况下,这是良好的编码习惯,总是对你的项目的副本 - 开发分支,如果你愿意。一旦你完成了一个发展的里程碑,你通常开发分支合并回主干。
树干
我们的做法在分支上工作!
Xcode的组织者,并切换到“资料库”视图。从左侧边栏,选择您的项目,确保选择的分支文件夹/组。您现在应该看到“添加分公司”和“删除分支”按钮,在窗口底部。
添加分支按钮
点击“添加分支”按钮。你会得到一个新的对话框:
创建一个新的分支
命名为分行的“新科”。为出发点,你需要指定的分支,以生成新的分支。
在我们的例子中,我们只有2个分支:主站和map_feature科。map_feature分公司仍然是不稳定的,因为你没有完成工作的新功能,让我们挑选的主分支为出发点,因为我们知道我们的项目,它拥有一个稳定的版本。
最后,确保“自动切换到这个分支”复选框被选中,单击“创建”按钮。
创建新的branch_2
当你选择的项目目​​录,在主办单位的左侧边栏的顶部右上角显示当前分支。
要使用Xcode的分支之间切换,首先要确保选择项目目录,然后单击“切换科”图标的右下角。
切换分支
你会得到一个对话框,其中列出所有可用的分支。选择“新科”,然后点击“OK”。
现在,让我们来看看如何进行的一个分支的更改将被应用到主干合并时。
你要做的是添加一个简单的UILabel的用户界面,在你创建新的分支。然后,你将新的分支合并回主干,并验证它的工作原理。
如果你没有选择新的分支,现在切换到它。然后选择“ MainStoryboard.storyboard,“对象库和主视图中拖动一个UILabel。
保存并运行,以确保,一切都OK,然后提交修改到版本库,通过选择FileSource ControlCommit。添加提交的评论,并完成提交。
现在切换到主分支(主干),选择管理,然后从左侧窗格中选择你的项目目录的底部窗格中,单击“切换科”图标,选择“master”分支,然后单击“OK”。
一旦你这样做开关,改变掌握在右上角类似下面的图片,你应该看到当前的分支。
开关,到主干
再次运行应用程序。你会注意到,是不是有新的UILabel中添加分支。显然,那是因为你改变了工作的分支。
最后的工作是与躯干的新分支合并,或者,换句话说,应用到主干分支中执行的更改。
转到FileSource ControlMerge。一个新的对话框会问你,你想合并到当前分支的分支。选择您所创建的新的分支,然后单击“选择”。
合并分支
一个新的窗口会显示出来,你可以使用左,右按钮的底部菜单上指定方向的合并。在我们的例子中,你要合并到主分支,这是当前的一个新的分支。由于当前分支的左侧和新的分支是正确的,你应该选择“右键”按钮,在右侧窗格中的左窗格中转移的变化。
最后,单击“合并”按钮,启动过程:在这一点上可能会提示您启用自动快照。既然你有你的一个Git仓库的变化,快照功能是多余的。因此,选择“禁用”。
如果一切顺利的话,你应该看到的UILabel)的变化(新的分支出现在用户界面中,当你点击的MainStoryboard.storyboard或当您运行的应用程序。现在,您所做的更改是因为合并在树干!

忽略了我,后果自负

Git使用一个特殊的文件,名为。gitignore,该公司持有约你不想提交到Git存储库的文件的信息。当你执行一个Git提交时,这些文件会被忽略。
但是,为什么你应该想想忽略某些文件,因为它们依赖于你的项目?
嗯,实际上,这是不是承诺的每一个文件的必要步骤。我的意思是,有一些文件,喜欢你的设置文件需要被忽略。DS_Store,或您的私人shemes文件。xcuserdatad的。
在本教程中,我将忽略这些文件:
。DS_Store
建立/ *
*。xcuserdatad
但在其他情况下,这实际上取决于你的项目文件。例如,在许多情况下,我使用,忽略由Vim产生的临时文件(。SWP文件中的)。
其实,你可能需要知道,有两个选择,当你想使用Git忽略文件。第一个被称为“库”,被分配到一个存储库(一个项目),如果您创建这样的文件,并把它推到你的远程存储库(如果你想与他人分享您的项目),每个人都谁仓库克隆到他的本地机器上,将充分利用您刚刚创建了这一点。gitignore文件:]
A。gitignore文件不会被添加到存储库中的默认。所以,你需要手动添加。打开“文字编辑和添加以下内容:
建立/ *
。DS_Store
*。xcuserdatad
让我们在上面的一行行:
  • 建立/ *这将排除这是由Xcode创建时创建的应用程序二进制整个目录。
  • DS_Store:此规则将排除OS X文件夹的属性。
  • xcuserdata:排除用户数据 ​​文件。
将文件保存在你的项目的根目录下,并命名它。gitignore
。gitignore
“第二个选择:如果你有很多的Git库(因此很多项目),以及你希望所有的项目,忽略相同的文件。您一定不想为每个版本库中创建gitignore文件。在这种情况下,你可能需要设置一个所谓的“全球性”。gitignore文件。
要做到这一点,只需创建一个。gitignore_global以同样的方式,你做的。gitignore文件,并将其放置在你的home目录的文件,这个文件将影响到每一个库中,您从远程仓库克隆。
但是,这样做,你需要告诉Git使用这个文件的,没有你呢?;]
好了,幸运的是,这是很容易的的xcrun命令,只需键入命令行:
xcrun git的配置 - 全球core.excludesfile〜/。gitignore_global
一旦你运行此命令时,Git会使用这个文件每次你克隆一个仓库,因此,将其分配给下面的文件。
gitignore文件的文件,把更多的例子,看看我们的论坛对此事的讨论

Xcode中,git和github上

所有的工作,你这样做已经保存在您的计算机上使用本地存储库。GitHub的网页,可让您将您的项目在GitHub的服务器上保存到远程存储库。这是伟大的,因为它可以让您轻松地与他人分享您的代码和项目为一组。
需要注意的是GitHub上使用Git源控制系统,这将简化我们的工作,因为你已经熟悉使用Git。
如果你不有一个GitHub上的帐户,创建并设置它的官方GitHub的指导
一旦这样做了,为您的项目在GitHub上创建一个存储库。要创建一个回购协议,单击“创建一个新的回购协议”按钮,GitHub的网站上。它应该与以下类似的屏幕:
创建新的存储库
您填写完上述所有领域中,单击“创建存储库”按钮。它会带你到一个安装指示屏幕,它显示您如何设置的Git在本地机器上的工作与新创建的仓库就建立起来。您可以忽略大多数的指示,但要注意的“混帐远程添加起源”线下“后续步骤”部分。后出现“git的远程添加起源”是你的G​​itHub上的SSH URL,你会需要它的到来。所以一定要记下它。
现在在Xcode中,选择WindowOrganizer,并切换到“资料库”选项卡。从左侧边栏,然后点击你的项目的遥控器文件夹。点击“添加遥控器”图标 - 它应该类似于下面的对话框:
远程仓库
您将看到两个领域。对于远程名称,键入类似MyNewRemoteRepository。为“位置”,您将需要由GitHub的SSH URL粘贴。如果你记下的SSH URL创建GitHub的回购后,你应该设置。在我的情况下,SSH URL是这样的:
的git@github.com  lucaazori / GitTestExampleRemoteRepository.git
SSH URL上也可以找到你的GitHub库页面:
SSH_URL
所以,URL,并将其粘贴在场上的位置,这样得到的东西:
创建一个远程存储库
现在,单击“创建”按钮。
如果一切正常OK,你应该看到新的远程仓库:
新的回购协议创建
Xcode和远程GitHub上库之间的连接,现在已经成功地建立起来。现在,你需要做的是把你的项目到远程仓库,然后你会看到它在GitHub的服务器上。
选择FileSource ControlPush。一个新的对话框会显示出来。遥控器上的库,你想要把你的代码,你需要选择的分支。由于你的资料库是新的,只会有一个选项。选择它并点击“PUSH”按钮。Xcode将推动改变,这就是它!
现在回到你的GitHub库通过您的浏览器。刷新页面,你应该可以看到你刚刚推出的新的分支。
在GitHub上的远程回购
你可以参考你的工作在本教程中,我的GitHub库的项目

设置的Git命令行

虽然Xcode中有功能内置于所有Git,这将是非常有用的知道如何使用Git通过命令行。
要做到这一点,打开一个终端,在本教程中,当前目录切换到你的项目文件夹中。我在我的情况下,运行以下命令:
CD /用户/马利克/桌面/ GitUseExample的
你的机器,只是在您的计算机上的实际路径替换/用户/马立克/桌面部分。在这一点上,你可以在你的项目文件夹中运行命令。要在当前文件夹中创建一个空的Git存储库,您可以使用下面的命令:
xcrun git的初始化
需要注意的是xcrun使用的Git版本,内置在Xcode中 - 所以你不必自己安装Git!
如果你要运行该命令的命令行,你应该看到像这样:
xcrun git的初始化
重新初始化现有的Git存储库/用户/马利克/的桌面/ GitUseExample / .git /
需要注意的是Git会创建一个命名的文件夹。蠢货,你的项目目录。这是一个隐藏的文件夹。如果你想成为能够看到它使用Finder,只要执行这个命令从终端会话:
默认写com.apple.finder AppleShowAllFiles TRUE
然后按Alt键,并用鼠标右键单击取景器(或同时按住ATL +控制),单击搜索图标。弹出的上下文菜单的底部有一个“重新启动”选项。
发现者
选择“重新启动”以重新启动搜索的选项启用上述的效果。该选项允许取景器显示所有文件,包括隐藏文件。您现在应该能够看到你的项目目录。git的文件夹内:]
git目录
让我们回到Git命令。在终端,键入以下命令(注意空格之间的“添加”和“。”):
xcrun,git的增加。
此命令会添加到了Git存储库中的所有项目文件。
当你想提交你的更改,只需要使用下面的命令:
xcrun混帐提交-M“的注释在这里:]”
上面的命令将执行提交操作,节省了源代码控制整个项目的当前状态。请注意,在提交信息是可选的。然而,在实践中,你应该进入的消息是有意义的。
如果操作成功的话,你应该看到一个摘要,列出所有您提交的文件,如下图所示:
提交结果

从这里去哪里?

恭喜你,你现在知道了如何使用Git源控制从Xcode中,用树枝,工作Github上,使用命令行,以及更多!
在这一点上你的工具,你需要在某一天到一天的基础,在Xcode中使用Git源控制。如果您想了解更多,这里是一个巨大的资源列表看看:
此外,一旦你掌握了基本知识,您可能需要分支的方法来看一看。就个人而言,我按照这个模型,在自己的项目。
我希望你喜欢这个教程,我期待着您的意见!