egret的iOS打包流程

環(huán)境:egretWing(4.1.4),xCode(9.4.1)拯啦,Egret iOS Support(5.0.12

1. egret項(xiàng)目打包

點(diǎn)擊發(fā)布按鈕


version填成你喜歡的,選擇Runtime,私鑰填成空劲装,不填成空的話我這邊啟動(dòng)不了,不知道具體的原因荐健。

稍等片刻后會(huì)在項(xiàng)目的bin-release/native目錄下生成文件酱畅。


將native/test目錄下的兩個(gè)文件進(jìn)行壓縮打包成zip包,切記是對(duì)game_code_test.zip+resource進(jìn)行打包江场,不是對(duì)上一級(jí)的test目錄打包纺酸。
這個(gè)步驟不是必須的,你也可以把game_code_test.zip和resource文件拷貝到iOS項(xiàng)目中址否,但是為了方便管理餐蔬,我選擇把文件夾壓縮,只管理一個(gè)文件佑附,然后運(yùn)行時(shí)unzip樊诺。

2. iOS項(xiàng)目工程構(gòu)建

新建iOS空工程,并關(guān)閉bitcode(egret庫(kù)不支持)音同。


將下載的egret-ios-support-5.0.12/egret_ios_template/proj.ios/egret_libs文件夾與egret-ios-support-5.0.12/egret_ios_template/proj.ios/HelloEgret/SSZipArchive文件夾拷貝至項(xiàng)目中词爬。
將剛才打包的test.zip也一并拷入。

導(dǎo)入依賴的庫(kù)权均。

3. 代碼編寫

//EgretViewController.h
#import <UIKit/UIKit.h>

@interface EgretViewController : UIViewController


/**
 打開egret頁(yè)面

 @param gameVersion 游戲版本號(hào)
 @param sourceController 來(lái)源視圖
 */
+ (void)presentEgretVCWithVersion:(NSString *)gameVersion
                 sourceController:(UIViewController *)sourceController;

@end
//EgretViewController.m
#import "EgretViewController.h"
#import "SSZipArchive.h"
#import "EgretRuntime.h"

@interface EgretViewController ()
//游戲版本號(hào)
@property (nonatomic,strong) NSString *gameVersion;

//egret引擎所在的子視圖
@property (nonatomic,strong) UIViewController *childViewController;
//egret引擎
@property (nonatomic,strong) EgretRuntime *egret;
@end

@implementation EgretViewController

#pragma mark - API
+ (void)presentEgretVCWithVersion:(NSString *)gameVersion
                 sourceController:(UIViewController *)sourceController;
{
    EgretViewController *vc = [[EgretViewController alloc] init];
    vc.gameVersion = gameVersion;
    [sourceController presentViewController:vc animated:YES completion:nil];
}


#pragma mark - Cycle
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    
    //綁定事件
    [self bindEvent];
    //運(yùn)行游戲
    [self runGame];
}

#pragma mark - Method
//運(yùn)行游戲
- (void)runGame
{
    //存儲(chǔ)路徑更目錄路徑
    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //游戲解壓后的核心zip文件路徑
    NSString *gamePath= [NSString stringWithFormat:@"%@/%@/game/game_code_%@.zip",
                         rootPath,
                         self.gameVersion,
                         self.gameVersion];
    
    //判斷游戲是否已經(jīng)解壓縮
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:gamePath])
    {//未解壓縮顿膨,進(jìn)行解壓縮操作
        
        //游戲壓縮包文件路徑
        NSString *gameZipPath = [[NSBundle mainBundle] pathForResource:self.gameVersion ofType:@"zip"];
        
        //游戲目錄結(jié)構(gòu)一定要為{$root}/{$version}/game/xxx.zip
        //{$root}/{$version}目錄
        NSString *firstDir = [NSString stringWithFormat:@"%@/%@",rootPath,self.gameVersion];
        BOOL isDir = NO;
        BOOL existed = [fileManager fileExistsAtPath:firstDir
                                         isDirectory:&isDir];
        if (!(isDir == YES && existed == YES))
        {
            [fileManager createDirectoryAtPath:firstDir withIntermediateDirectories:YES attributes:nil error:nil];
        }
        //{$root}/{$version}/game目錄
        NSString *secondDir = [NSString stringWithFormat:@"%@/%@/game",rootPath,self.gameVersion];
        isDir = NO;
        existed = [fileManager fileExistsAtPath:secondDir
                                    isDirectory:&isDir];
        if (!(isDir == YES && existed == YES))
        {
            [fileManager createDirectoryAtPath:secondDir withIntermediateDirectories:YES attributes:nil error:nil];
        }
        
        //解壓文件
        dispatch_async(dispatch_get_main_queue(), ^{
            [SSZipArchive unzipFileAtPath:gameZipPath
                            toDestination:secondDir
                          progressHandler:^(NSString * _Nonnull entry, unz_file_info zipInfo, long entryNumber, long total) {
                              NSLog(@"解壓進(jìn)度:%.2f",(entryNumber*1.0/total));
                          }
                        completionHandler:^(NSString * _Nonnull path, BOOL succeeded, NSError * _Nonnull error) {
                            if (succeeded)
                            {
                                [self runGame];
                            }
                            else
                            {
                                NSLog(@"游戲資源解壓出錯(cuò)");
                            }
                        }];
        });
        
    }
    else
    {//已解壓縮,調(diào)用egret庫(kù)運(yùn)行游戲
        
        //運(yùn)行參數(shù)
        NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
        options[@OPTION_EGRET_ROOT] = rootPath;
        options[@OPTION_LOADER_URL] = [NSString stringWithFormat:@"game_code_%@.zip",self.gameVersion];
        options[@OPTION_GAME_ID] = self.gameVersion;
        [self.egret setOptions:options];
        [self.egret run];
        self.childViewController.view.hidden = NO;
        
    }
}

//綁定事件
- (void)bindEvent
{
    //__weak EgretViewController *weakSelf = self;
    [self.egret setRuntimeInterface:@"RuntimeInterface" block:^(NSString *value) {
        //to do sth.
    }];
}


#pragma mark - Getter
- (EgretRuntime *)egret
{
    if (_egret == nil)
    {
        _egret = [EgretRuntime createEgretRuntime];
        [_egret initWithViewController:self.childViewController];
    }
    return _egret;
}

- (UIViewController *)childViewController
{
    if (_childViewController == nil)
    {
        _childViewController = [[UIViewController alloc] init];
        [self addChildViewController:_childViewController];
        [self.view addSubview:_childViewController.view];
        _childViewController.view.hidden = true;
    }
    return _childViewController;
}

@end


然后在需要調(diào)用的地方寫下以下代碼即可

[EgretViewController presentEgretVCWithVersion:@"test"
                              sourceController:self];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叽赊,一起剝皮案震驚了整個(gè)濱河市恋沃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌必指,老刑警劉巖囊咏,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異塔橡,居然都是意外死亡梅割,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門葛家,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炮捧,“玉大人,你說(shuō)我怎么就攤上這事惦银。” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵扯俱,是天一觀的道長(zhǎng)书蚪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)迅栅,這世上最難降的妖魔是什么殊校? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮读存,結(jié)果婚禮上为流,老公的妹妹穿的比我還像新娘。我一直安慰自己让簿,他們只是感情好敬察,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尔当,像睡著了一般莲祸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椭迎,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天锐帜,我揣著相機(jī)與錄音,去河邊找鬼畜号。 笑死缴阎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的简软。 我是一名探鬼主播蛮拔,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼替饿!你這毒婦竟也來(lái)了语泽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤视卢,失蹤者是張志新(化名)和其女友劉穎踱卵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體据过,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惋砂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绳锅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西饵。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鳞芙,靈堂內(nèi)的尸體忽然破棺而出眷柔,到底是詐尸還是另有隱情期虾,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布驯嘱,位于F島的核電站镶苞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鞠评。R本人自食惡果不足惜茂蚓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剃幌。 院中可真熱鬧聋涨,春花似錦、人聲如沸负乡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)敬鬓。三九已至淹朋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钉答,已是汗流浹背础芍。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留数尿,地道東北人仑性。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像右蹦,于是被迫代替她去往敵國(guó)和親诊杆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 用到的組件 1何陆、通過(guò)CocoaPods安裝 2晨汹、第三方類庫(kù)安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,609評(píng)論 1 180
  • 崇尚教化巴蜀地贷盲,官吏慧眼興學(xué)起淘这。 奉職循例秉政勤,石室千年史獨(dú)一巩剖。 世平道治文化梯铝穷,民豐阜康君子志。 史記芳跡開川...
    顧勇詩(shī)書閱讀 266評(píng)論 2 7
  • 喜歡你的清晨到日暮佳魔,喜歡你總是把笑容掛在臉上曙聂。 生活中不是沒(méi)有不開心,只不過(guò)遇見了烏云鞠鲜,你卻是太陽(yáng)宁脊。 當(dāng)別人的世界...
    簡(jiǎn)村小吹閱讀 423評(píng)論 4 7