2015年11月10日 星期二

Git學習資源介紹

跟大家分享幾個我在學習Git時,覺得不錯的Git學習資源

30 天精通 Git 版本控管: https://github.com/doggy8088/Learn-Git-in-30-days

Will保哥之的大作,從Git的結構跟原理開始介紹怎麼使用Git,可以幫你理清很多觀念很值得一讀,保哥也開過相關的課程,可以帶領新手很快入門,有機會可以去上一下,會很有收獲哦~

Git 版本控制系統:https://ihower.tw/git/index.html

作者是在台灣上教Git的數一數二的大師ihower寫的,我看了他很多簡報,滿能幫助理清觀念的,可以依教材的順序往下看,再搭配中間的簡報及blog的文章,這也是大推學習Git的好地方!

Pro Git : http://iissnan.com/progit/index.zh-tw.html

這本應該可以算是Git的聖經本,裡面很詳細的介紹各種Git的使用技巧,有些部分寫的比較文言一點,算是比較深入的書,可以選擇你要的章節看,等你學習到一定的程度想再更加精進,再回來看其他的章節

LearnGitBranching:http://pcottle.github.io/learnGitBranching/

這是一個做中學(Learn by doing)的網站,一步步依指示教導git的使用,建議是先把保哥及ihower裡先研讀一篇再來這裡實作會更有效果哦

Code School :https://www.codeschool.com/paths/git

Code School也是一個標榜做中學的網站,不只是用影片先教導你觀念,再來會用練習的方式讓你更加了解剛才影片裡教導的觀念及技巧,不過除了Try Git課程外,其他課程是付費才可以觀看,不過目前因為他被另一家程式教學網站(pluralsight)併購了,現在推出三天免費的優惠,可以趁這三天好好的把其他課程一次學完......XD

連猴子都能懂的Git入門指南:http://backlogtool.com/git-guide/tw/

連猴子都懂了,你應該也會吧?網站用了很多圖文來教你使用Git,不過我覺得在觀念沒有講的很深入,但還是滿值得看的

GIT教學: http://kingofamani.gitbooks.io/git-teach/

這個應該是新北市教研中心-程式設計班的課程教材,內容也不錯也可看一看,不過好像還沒寫完,有些章節還不完全

TortoiseGit + GitHub : https://www.youtube.com/watch?v=73lJ6hcWMho&list=WL&index=4

講英文的不太懂,國語的又講不好,那用台語來介紹Git李共賀唔賀,這是在youtube上找到的一個用台語教你如何使用TortoiseGit及GitHub的教學影片,作者講話的方式有濃濃的台味,看了會讓你會心一笑:)

再分享幾個git的簡報資料....

















 

以上是我學習Git覺得不錯的幾個網站,如果有新的再補上來,也歡迎大家有看到不錯的網站也可以分享上來~~3Q

2015年10月11日 星期日

[Swift][UIView _accessibilitySetNavigationControllerInset:]: unrecognized selector sent to instance

這二天開發iOS程式遇到的一個奇怪問題
我完全用手刻去產生版面,沒有使用storyeboard及nib,用SnipKit做Constraints
今天寫一個新的頁面,只要一下拉就會出現
-[UIView _accessibilitySetNavigationControllerInset:]: unrecognized selector sent to instance 0x7f8c01686980
google了半天也找不到問題,做了好多測試都還是一樣.....
後來把宣告的變數全都改一下名稱(全部都在一個i)就沒有問題了
我在想可能是我的變數名跟其他程式裡宣告的名稱可能重覆了吧.....
但是怎麼找都找不到....@@
特此記錄一下

2015年5月15日 星期五

ios憑證過期如何重簽ipa而不用重compiler

最近遇到一個需求,要把別人做好但憑證己過期的ipa檔案,用我們自己的apple帳號重新簽署發行,原本以為不可行,原來還真的可以,記錄一下參考來源及步驟
本篇參考這篇文章的作法:http://dev.mlsdigital.net/posts/how-to-resign-an-ios-app-from-external-developers/

建立APP ID

首先如果你沒有App ID你必需申請一個新的app ID,因為我們拿別人的ipa檔所以它的app ID是綁在對方的帳號裡,為了要重新簽署,所以我們要新增一個自己的app ID,在apple developer portal下點選左邊的Identitifiers->App IDs功能選項進行到App ID的管理頁面,點選右上的"+"來新增App ID
iOS_App_IDs_-_Apple_Developer.png
依指示輸入App ID的名稱
Register_-_iOS_App_IDs_-_Apple_Developer.png
App ID Suffix選擇Explicit App ID並輸入Bundle ID,Bundle ID不能跟原來的一模一樣哦,因為這個app ID必需是唯一的,名稱取一樣apple也不會給你過的
Register_-_iOS_App_IDs_-_Apple_Developer 2.png
下方的App Services依你的需求來做選擇,如果需要推播就把Push Notification選項給勾起來,好了以後就可以點選下面的Continue來完成新增App ID

新增Provisioning Profiles

接下來用剛才新增的App ID來建立Provisioning Profile,點選portal左邊的Provisioning Profile選項進行到管理頁面,點選右上的"+"來新增Provisioning Porfile
iOS_Provisioning_Profiles_-_Apple_Developer.png
設定好你要的Profile發布方式,然後按Continue
Add_-_iOS_Provisioning_Profiles_-_Apple_Developer.png
接下來選取剛才新增的App ID,然後按Continue,完成新增Provisioning Profile
Add_-_iOS_Provisioning_Profiles_-_Apple_Developer 2.png
新增完成後就可以點選Download來把Provisioning Profile下載回來,點二下安裝到Xcode裡
iReSign_provisioning_profile.png

建立Entitlements Plist

在你的mac本機裡,開啟你最愛的編輯器新增一個檔案,檔名為entitlements.plist,內容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>PREFIX.yourappBundleID</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>PREFIX.yourappBundleID</string>
    </array>
</dict>
</plist>

再回到Apple Developer portal裡的App IDs選項裡,找到你新增的那筆App ID,點開後可以看到PREFIX及BundleID的值,把這二個值取代掉entitlements.plist的PREFIX.yourappBundleID的值

# 執行iReSign app
到GitHub下載iReSign程式

iReSign

下載後直接點二下執行程式,依程式指示輸入你的ipa的路徑、Provisioning profile的路徑、entitlements.plist的路徑,如果Bundle ID有改的話,請把Change ID打勾並在左邊輸入新的Bundle ID(這裡要跟你上面申請新的Bundle ID一致),下拉選單選擇你要執行簽署的apple帳號,設定完成後按下ReSign!
iReSign_和_blog_和_blog.png
如果沒有問題的話就可以在原本ipa的路徑下找到被Resign過新的ipa檔案,可以直接把ipa放你的新的裝置上測試看看囉~

2015年5月4日 星期一

iOS App不同狀態下的推播處理方式

最近在進行iOS程式開發時遇到的推播問題,特此記錄一下
我程式的需求是在收到推播後,針對推播的收到的內容進行頁面的切換
依App的狀態,推播發生時會有下面三種狀況:

1. App在背景執行的情況下收到推播    

這個情況就是一般的情況,推播會透過didReceiveRemoteNotification來進行處理

2. App在執行的情況下收到推播    

在App開啟的情況下收到推播,這種情況下推播也是會透過didReceiveRemoteNotification來進行處理,但通常就不會有推播的音效及跳出訊息,使用者收到推播時會不知道自己有收到推播,因此可以在didReceiveRemoteNotification裡進行app狀態的判斷後,加入其他提醒方法來讓使用者知道有推播發生

3. App在未開啟的情況下收到推播

在App未開啟的狀態下,收到推播後會透過推播來進行開啟App的動作,但是就不會執行didReceiveRemoteNotification,因此在這種情況下需要在AppDelegate的didFinishLaunchingWithOptions裡的launchOptions來進行判斷

針對三種狀況進行推播判斷的程式碼如下:

swift程式碼:
AppDelegate_swift_—_Edited.png

obj-c程式碼:
AppDelegate_m_—_Edited.png