顯示具有 Xcode 標籤的文章。 顯示所有文章
顯示具有 Xcode 標籤的文章。 顯示所有文章

2015年11月13日 星期五

[IDE Update] XCode 更新後的 library 檔案修正

毫無意外地,凡更新,必有包 ~ 原本使用的 libz.dylib 沒有辦法在 XCode 7.1 這個版本之下的 iOS 實裝環境下使用,專案內的檔列表已經呈現為紅色的無檔案狀態;進行編譯則會顯示 file not found.

有網友反映,要改用這個新的格式 libz.tbd 的檔案;不過,在我稍微嘗試了之後,確認至少以目前來說,我沒有因此解決問題。

其他網友則表示,透過這個步驟重加一次 library 應該就可以用了

1. Go to Build Phases >Link Binary with Librairies > + > Add other
2. Once in the file selection window do "CMD"+Shift+G (Go to folder) and type /usr/lib/
3. From /usr/lib you can add : libz.dylib and more...
4. Compile and have fun

雖然點選的是 libz.dylib,不過實際上增加進專案的卻是 libz.1.dylib 檔案。 確實加入這個檔案之後,Library 專案就能順利編譯完成了 ( Target 選擇為 Library & Generic iOS Device 的時候 );

如果在加入這個檔案之後,把原本已經成為紅色的 libz.dylib 從專案移除的話呢,在編譯模擬器版本的時候,還是會產生錯誤,所以變成專案檔列表裡頭會同時存在兩個 libz.dylib 的檔案。

不過,至少這樣能先解決掉編譯錯誤的問題。


#Xcode7.1 #libz.dylib

2014年10月12日 星期日

[記錄]如何實作 UICollectioinView 的 Header & Footer ; 使用 UICollectionViewDelegateFlowLayout


Xcode : 6.0.1



順利的將資料圖檔載入至設定的 UICollectioinView 之後, 找了一堆這個物件的參數設定發現, 如果不是使用 User Interface Xib 檔的方式進行物件的設計, 而是使用 code 產生的方式, 不容易發現可以產生 Table Sectioin Header & Footer 的地方。

在 Xib 檔的地方至少還能發現 Attributes Inspector 這個頁面的 Collection View 參數的部分, 還能勾選:













2013年5月13日 星期一

[記錄] 當一開始接觸 xib 檔, 與 initWithFrame 裡頭的 [[NSBundle mainBundle] loadNibNamed: ... ] 用途,造成的混亂現象



大致上會造成問題還是因為不熟的關係造成的。

因為不曉得怎麼透過 code 把 xib 檔內的 View 物件產生出來,所以一直在網路上找資訊,然後終於找的某個答案了之後,那就是一種答案了,先直接拿來用了再說,根本沒有細究。

//  ------------


先建立繼承UIView的class,
接下來建立xib檔,並在xib中設定class為剛剛建立的class,
把xib內的物件和class link 起來,
並在initWithFrame中加入

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        NSArray *viewXib = [[NSBundle mainBundle] loadNibNamed:@"viewer" owner:self options:nil];
        self = [viewXib objectAtIndex:0];
    }
    
return self;
}

2012年6月6日 星期三

xcode除錯技巧

      最近在網路上看到一篇文章發現原來xcode中斷時,有的物件可以直接印出內容而不需要使用NSLog,方法如下:

     

在想要看的物件點擊右鍵,選第一個,就可以直接印出內容,在這之前我都傻傻的用NSLog去印內容出來(其實是我跟GDB不熟><)







另外也可以在右邊的cmd直接使用命令印出你想要知道的變數,"po 變數名稱"



還有一些其他指令,詳細可以看這篇文章:   Xcode一些調式技巧

裡面也有教查詢莫名其妙crash的方法,有興趣可以試試看

討人厭的link error

有時候會遇到奇奇怪怪的link error,
又很難查到原因,
來個集中解決帖記錄一下好了




    重新命名檔案名稱之後就出現這個錯誤訊息,上網查了一下解決辦法卻很簡單XD

解決:
     選.m檔到右邊的屬性視窗修改項目,打勾就正常了~是不是很簡單勒XDD

2.
   看到一堆底線開頭的error,現在都會先查看看是不是少加framework,下圖是缺了SystemConfiguration. framework

























2012年4月13日 星期五

Xcode IDE 將舊有 class 檔案加入專案的 Bug



昨天 De 了一個下午的 bug, google 了一堆網站仍然找不到問題的異常

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_CCSVFile_Stage", referenced from:
      objc-class-ref in CGameManager.o
     (maybe you meant: _OBJC_CLASS_$_CCSVFile_StageFlag)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

終於在晚上找到問題的產生原因了,一切都是 Xcode 造成的。 =..=

問題的產生主因之一,是因為我打算從其他的位置直接加入一個之前在其他 Project 就已經先行完成的共用 class,
而不是在目前的 Project 裡頭直接產生新的檔案的方式造成的。

↑[圖一] 專案目錄畫面

準備把其他位置的 class 檔 “CCSVFile_Stage” 拉入此專案目錄當中。

[圖二] 同時 將 CCSVFile_Stage.h & CCSVFile_Stage.m 檔拉進專案目錄
↑[圖三] 檔案加入專案目錄之後 




然後,慘案就此發生了。


[圖四] Error Message

然後,終於在自行嘗試過很多種方式後將此一問題排除了。

問題是發生在 Xcode 這個 IDE 環境上! =..=

解決這個問題的方式是:使用先後順序的方式個別把檔案加入專案目錄當中,再來進行 Build 就能排除這樣的異常了。

※ 先拉 CCSVFile_Stage.h 再拉 CCSVFile_Stage.m;或是先拉 CCSVFile_Stage.m,再拉 CCSVFile_Stage.h 都不會再出現問題。 

↑[圖五] 通過考驗 ^^"















----
半天就這樣飛嚕 XD


------------------------------------------------------------------------------------------------
寫完上面這一些資料後,又重新搜尋一下異常訊息,結果找到了另一篇關鍵性的文章:


跟著他的步驟操作之後,進入的畫面長這樣子

↑[圖六] 會被 Project 進行編譯的 implementation file


























※ 再試著將檔案同時拉入專案目錄時,的確不會自動將檔案加入這個 List 當中;不過,依序加入的方式就會自動加入了。



2012年1月18日 星期三

Cocos2d 官方網站查到的 Release Note 中,和舊的 class or method 無法使用有關的修正事項 for 1.0.1.


cocos2d-iphone release-1.0.1 CHANGELOG


利用 deprecat 這樣的關鍵詞彙 可以在 Release Note 裡頭找到一些到 ver 1.0.1 版之後,不再被支援的 method.
//  ------------------------------------------------------------------------------------------------

version 1.0-rc - 29-Mar-2011
. [NEW] All: Removed many deprecated methods and classes that were scheduled for removal on v1.0

version 1.0-beta - 01-Mar-2011
. [NEW] Layer: CCMultiplexLayer deprecated. New name is CCLayerMultiplex

version 0.99.5-rc0 - 25-Oct-2010
. [NEW] AnimationCache: New class. It deprecates the CCSprite#animation methods (issue #848)
. [NEW] Animation: simplified API. Name is no longer needed. Deprecated API that uses name.

version 0.99.5-beta2 31-Ago-2010
. [NEW] Label: CCLabelAtlas#labelAtlasWithString: -> labelWithString. Old method deprecated
. [NEW] Label: CCBitmapFontAtlas deprecated. Use CCLabelBMFont instead.
. [NEW] Label: CCBitmapFontAtlas#bitmapFontAtlasWithString -> labelWithString. Old method deprecated.

version 0.99.5-beta 30-Jul-2010 - AKA 'CJ the artifact killer'
. [NEW] SpriteSheet is deprecatd. Use SpriteBatchNode instead.

//  ------------------------------------------------------------------------------------------------


利用 rename 這樣的關鍵詞彙 可以在 Release Note 裡頭找到一些到 ver 1.0.1 版之後,不再被支援的 method.
//  ------------------------------------------------------------------------------------------------

version 1.0-beta - 01-Mar-2011
. [FIX] Templates: ItunesArtwork renamed to iTunesArtwork (issue #1092)

version 0.99.5-rc1 - 15-Nov-2010
. [FIX] Particles: centerOfGravity renamed to sourcePosition (issue #1026)


version 0.99.5-beta2 31-Ago-2010
. [NEW] Actions: files renamed: CCXXXAction.[hm] -> CCActionXXX.[hm]
. [NEW] Actions: Using new naming convetion:
               CCInstantAction -> CCActionInstant
               CCIntervalAction -> CCActionInterval
               CCEaseAction -> CCActionEase
               CCCameraAction -> CCActionCamera
. [NEW] Action: CCPropertyAction renamed to CCActionTween
. [NEW] Director: New naming convention: CCnameDirector -> CCDirectorName
. [NEW] Label: CCLabel renamed to CCLabelTTF

version 0.99.5-beta 30-Jul-2010 - AKA 'CJ the artifact killer'
. [FIX] Tests: AtlasTest renamed to LabelTest

version 0.99.4-rc3 - 01-Jul-2010
. [FIX] Director: renamed mainLoop -> drawScene

//  ------------------------------------------------------------------------------------------------


疑似與 CCSlideInRTransition to CCTransitionSlideInR 這一類的 method 有關的修正.
CCXxxTransition -> CCTransitionXxx
//  ------------------------------------------------------------------------------------------------

version 0.99.5-beta2 31-Ago-2010
. [NEW] Transitions: new transition naming convention (issue #946)


//  ------------------------------------------------------------------------------------------------
//  ------------------------------------------------------------------------------------------------

----

還在看範例的初學者の小試身手


2011年10月4日 星期二

開發憑證 (Development Certificates)與發佈憑證 (Distribution Certificates)的製作

資料來源

發佈憑證 (Distribution Certificates) 就跟 開發憑證製作方法一樣


之後在Xcode中選 Product -> Archive 
即可產生.xcarchive的包裝檔.


可使用Xcode 4 之後的 Origanizer工具 進行submit 或 share (Ad Hoc)

2011年9月19日 星期一

FMDB 將 SQLite 包裝成類Object-C的物件

資料來源

簡單說就是到
這裡 下載Source Code
然後把src目錄下的都加到專案中..

使用方法就像使用一個Object-C物件那樣去操作DataBase...


另一個FMDB的介紹

再一個

其中有Transaction的建議作法
若要做executeUpdate的動作,前面要加個[_db beginTransaction];,然後再寫executeUpdate動作,最後再[_db commit];會比較好~

2011年9月8日 星期四

讓函式可以接收不定長度的參數

使用的方式、概念,
都跟 C++ 相同。


利用三個內建函式來取得資料:

1. va_start(<#ap#>, <#param#>)
2. va_arg(<#ap#>, <#type#>)
3. va_end(<#ap#>)

ap: argument pointer ,使用 va_list 宣告的型別
param: 最後一個接收到的指定參數
type: 指定所取得的參數是何種型別


ex:
[declaration]
-(NSMutableArray*) arguCollection:(NSString *) str, ...{
NSMutableArray *ret = [NSMutableArray new];

va_list argList;
NSString *get;

va_start(argList, str);
while ((get=va_arg(argList, NSString*))) {
[ret addObject:get];
}

return ret;

}

進入到函式裡時,
函式所接收到的參數們會收集在一個陣列裡,
以上面的例子來看,
就是長成這樣子 ->
[str, var_1, var_2, ..., var_N] 。

一使用 va_list 宣告
argList 時,
就會將
argList 指向這個陣列。

經過 va_start 執行後,
argList 指標就會指到 var_1 的位置,
所以要告訴 va_start 不定參數從哪開始時,
就得利用 str 這個變數來指定。

再用
va_arg 函式後,
即可取得資料了...

[test]
[
<#instance#> arguCollection:@"test", @"1", @"2", @"3", nil]

使用時最後面要給 nil ,
原因是為了讓 while 迴圈知道什麼時候該停止。


2011年9月7日 星期三

Xcode4 文字圖案 國際化設定.(Localization)

資料來源

簡單記一下..
在Project 裡 的 Info 頁.
選底下的Localization 的 + 號, 新增需要的語言項目.

然後開啟  Utilities窗框  (正確是按 option+command+0 切換顯示隱藏)
(資料來源的 option_command+l 是開啟 Filter in Library , 雖然也會順便帶出Utilities沒錯..)

然後點選要建立不同語言版本的 字串檔或是圖片.
選 Utilities框 裡面的Localization 下方的 + 號, 產生對應語系的版本.
再依語言版本去設定字串檔即可.
圖片的話 可以在檔案上按右鍵選Show in Finder 去到檔案存放的位置,用想要替換的圖檔去取代原圖檔.

另.
建立 Localizable.strings 的字串檔後
可以用  NSLocalizedString(key, comment);
去取得設定的字串..
或是 NSLocalizedStringFromTable(key, tbl, comment);
取得 tbl 的 key 的字串.

2011年9月5日 星期一

改變UIImage的顏色

資料來源

簡單說就是..底下的函式.
丟一個 UIImage進去,回傳一個填上顏色的UIImage回來


- (UIImage*)getRedImage:(UIImage*)img{
    UIGraphicsBeginImageContext(img.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextTranslateCTM(context, 0, img.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
    CGContextDrawImage(context, rect, img.CGImage);
    CGContextClipToMask(context, rect, img.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context,kCGPathFill);
    UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return coloredImg;
}

2011年8月30日 星期二

Xcode TableView 設定

資料來源

基本的tableView 資料設定與使用就略過不提.

tableView可以分多項scetion,在各header分類時可以設定header來明顯標示出section的段落.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    //這邊return的就是各section上的header    return @"Header";
}

然後如果想在tableView右邊顯示index 可以快速跳越到某section.
加入底下的函式. 並自定各自要顯示的index的title
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSArray* sIndex = [[NSArray alloc] initWithObjects:@"0-9", @"A", @"中", @"日", @"法", @"德", nil];
    return 
[sIndex autorelease];
}

2011年6月20日 星期一

Xcode與 Git 版本控制 設定

參考網站

Xcode 內建了git 可以簡易的做版本控制


在建立專案後有勾選使用 local Git , 


檔案有修改後 , 可以在檔案名稱後 看到 "M" 的標記.


新增的檔案也會有 "A" 的標記.


選取檔案, 右鍵 選取 Souce Controll -> Commit Selected Files 
填寫 Commit Message 後 送出.

2011年6月17日 星期五

如何透過XCode在上架前替程式進行檢查?

資料來源

開發完的軟體提交給Apple後會經過Apple的審核.
實際上審核會分兩個階段,
第一階段先機器審核,
透過自動化的審核工具掃描要上架的軟體,檢查其中是否有違反一些規定、像是使用Private API等.
第二階段再人工審核.


XCode 3.2之後的版本中便增加了將軟體打包、並進行上述機器審核的功能。因此,開發者可以在正式上架之前在XCode進行初步的檢查,確定沒有問題後再將軟體正式送交蘋果審核。這樣一來,雖然沒辦法保證上架一定成功,但被退件的機率卻也變低了不少,只需通過人工審核即可。


XCode操作流程