天天看點

坑人的 week 內建坑人的 week 內建正确姿勢總結

文章目錄

  • 坑人的 week 內建
    • 坑1
    • 坑2
    • 坑3
    • 坑4
    • 坑5 6 7 ...
  • 正确姿勢
  • 總結

坑人的 week 內建

本人經過兩天的時間終于把 week 內建到了項目之中,中間經過了非人的折磨,躺了無數的坑,進一個坑,把項目删了,告訴我這條路走不通,換條路接着走,撲街之後,在進行下一個方式。簡單的把我錯誤的方式介紹下,避免後人趟坑,最後把我成功的方式貼出來供大家參考。

坑1

看官網介紹,興沖沖的看到了一種方式,隻需要下載下傳源碼,然後把一個檔案拖到項目中,就可以實作了,建項目,git 源碼,期間發現官網給的位址已經不可用,自己去 github 上面找了新的位址,為自己暗自高興,這還不是兩三個小時搞定的事情,到最後才發現,那隻是 Devtools 的繼承方式,因為不仔細看文檔,撲街了。這個純粹自己的原因,不過也希望淘寶更新下文檔,至少下載下傳連接配接是最新的嘛。

坑2

又仔細看了看文檔,發現有一個內建 Weex 到已有應用,大大懊悔自己沒有好好的看文檔,按着教程,應該很快就可以搞定,上面提供了三種pod carthage git 本人比較熟悉 git,先嘗試了 git 方式,下載下傳了源碼,同理,位址還是自己去 github 上找的。按照教程打開 WeexSDK 項目,

有一個 WeexSDK 的 framework 編譯,在項目的下面果然出現了兩個WeexSDK.framework的檔案,不知道為啥是兩個,點進去,發現指向的都是一個檔案,lipo -info 檢視 cpu 類型,支援arm64 想着再生成一個 x86的 framework 就完美了,開始折騰,失敗(應該是自己對 framrwork 的合成不太熟悉導緻),學習了一陣,合成成功,終于有舒了一口氣,把WeexSDK.framework引入到項目,引入必要的系統庫檔案,other-linker Flags 添加 -Objc ,到拷貝 native-bundle-main.js 檔案的時候編譯運作 ,怎麼也在他說的路徑找到那個檔案,先把 main.js 拷貝進去吧,竟然運作了起來,然後,項目完美的不加載任何東西。

選擇 WeexSDK_MTL進行編譯

坑3

git 方式,版本号去掉,下載下傳最新的 WeexSDK。下載下傳完成,編譯,編譯不起來,xcode10編譯方式更新,不知道是淘寶的問題,還是 xcode10的問題,發現一個 xcode10對 pod 支援的問題,不能用新的file->workspace setting ->build systems 選擇不帶 new 的,又倒騰了各種配置問題,總算能夠編譯了,運作崩潰。。。。

坑4

跑playground 工程,上面的步驟,git pod ,配置,編譯,運作,靠,竟然跑起來,總算松了一口氣,至少有個能給上司看的東西了,下一步就是按照 playground 工程的方式,繼承到自己的項目中就可以了。萬裡長征總算走了一大半了,事實證明,坑是填不完的,自己建了一個全新的項目,然後開始對照 playground 的項目配置自己的項目,拖檔案夾,拖檔案,配置路徑,配置項目配置,散亂的亂七八糟的檔案,最後我放棄了,根本編譯不起來,檔案引用用的絕對路徑,太多了,改不過來,放棄了。

坑5 6 7 …

正确姿勢

1 git clone https://github.com/apache/incubator-weex.git 下載下傳完整項目到自己的電腦,裡面包含iso ,web ,android 的全部項目,我們主要關注 ios 檔案,

2 建立項目,例如WeexTest

3 進入到WeexTest 的xcodeproj同目錄檔案下,pod init 建立 Podfile 檔案,放哪兒先不管。

4 進入到incubator-weex/ios目錄下,把 sdk 目錄真個全部拷貝到Podfile 同目錄下。

5 編輯 Podfile 如下

platform :ios, '8.0'

def common
	pod 'WeexSDK', :path=>'./sdk/'
end

target 'weekDingdang4' do
    common
end
           

我們編譯 WeexSDk,采用的是本地編譯,此時如果運作 pod install 會出現 WeexSDK.podspec檔案不存在的錯誤,我們從incubator-weex/檔案夾下面找到這個檔案,把它拷貝到WeekTest/sdk 目錄下,

此時打開這個檔案是如下的内容

# coding: utf-8
Pod::Spec.new do |s|

  s.name         = "WeexSDK"

  s.version      = "0.19.0"

  s.summary      = "WeexSDK Source ."

  s.description  = <<-DESC
                   A framework for building Mobile cross-platform UI
                   DESC

  s.homepage     = "https://github.com/alibaba/weex"
  s.license = {
    :type => 'Copyright',
    :text => <<-LICENSE
           Alibaba-INC copyright
    LICENSE
  }
  s.authors      = { "cxfeng1"      => "[email protected]",
                     "yangshengtao" => "[email protected]",
                     "kfeagle"      => "[email protected]"
                   }
  s.platform     = :ios
  s.ios.deployment_target = '8.0'
  s.source =  { :path => '.' }
  s.source_files = 'ios/sdk/WeexSDK/Sources/**/*.{h,m,mm,c,cpp,cc}'
  s.resources = 'pre-build/*.js','ios/sdk/WeexSDK/Resources/[email protected]'

  s.user_target_xcconfig  = { 'FRAMEWORK_SEARCH_PATHS' => "'$(PODS_ROOT)/WeexSDK'" }
  s.requires_arc = true
  s.prefix_header_file = 'ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch'

  s.private_header_files = 'ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h',
                           'ios/sdk/WeexSDK/Sources/Layout/WXScrollerComponent+Layout.h',
                           'weex_core/Source/**/*.{h,hpp}'

  s.xcconfig = { "OTHER_LINK_FLAG" => '$(inherited) -ObjC', 'GCC_PREPROCESSOR_DEFINITIONS' => 'OS_IOS=1' }

  s.frameworks = 'CoreMedia','MediaPlayer','AVFoundation','AVKit','JavaScriptCore','GLKit','OpenGLES','CoreText','QuartzCore','CoreGraphics'
  
  s.default_subspec='WeexCore'

  s.subspec 'WeexCore' do |w|
    w.source_files = 'weex_core/Source/base/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/core/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/wson/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/third_party/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/include/**/*.{h,hpp,m,mm,c,cpp,cc}'
    w.exclude_files = 'weex_core/Source/**/*android.{h,hpp,m,mm,c,cpp,cc}'

    w.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => ['${PODS_ROOT}/Headers/Public/WeexSDK/core/**'] }
    w.header_mappings_dir = 'weex_core/Source'

    w.libraries = "c++"
  end

end

           

再次編譯 會出現找不到檔案的 bug,因為我們沒有修改它的檔案路徑,我們對照上面的檔案,把需要的 js檔案,weex_core檔案夾全部拷貝到sdk/目錄下,js檔案在incubator-weex/pre-build/目下,weex_core 在incubator-weex/目下。

6 編輯WeexSDK.podspec檔案

結果如下

# coding: utf-8
Pod::Spec.new do |s|

  s.name         = "WeexSDK"

  s.version      = "0.19.0"

  s.summary      = "WeexSDK Source ."

  s.description  = <<-DESC
                   A framework for building Mobile cross-platform UI
                   DESC

  s.homepage     = "https://github.com/alibaba/weex"
  s.license = {
    :type => 'Copyright',
    :text => <<-LICENSE
           Alibaba-INC copyright
    LICENSE
  }
  s.authors      = { "cxfeng1"      => "[email protected]",
                     "yangshengtao" => "[email protected]",
                     "kfeagle"      => "[email protected]"
                   }
  s.platform     = :ios
  s.ios.deployment_target = '8.0'
  s.source =  { :path => '.' }
  s.source_files = 'WeexSDK/Sources/**/*.{h,m,mm,c,cpp,cc}'
  s.resources = './*.js','WeexSDK/Resources/[email protected]'

  s.user_target_xcconfig  = { 'FRAMEWORK_SEARCH_PATHS' => "'$(PODS_ROOT)/WeexSDK'" }
  s.requires_arc = true
  s.prefix_header_file = 'WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch'

  s.private_header_files = 'WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h',
                           'WeexSDK/Sources/Layout/WXScrollerComponent+Layout.h',
                           'weex_core/Source/**/*.{h,hpp}'

  s.xcconfig = { "OTHER_LINK_FLAG" => '$(inherited) -ObjC', 'GCC_PREPROCESSOR_DEFINITIONS' => 'OS_IOS=1' }

  s.frameworks = 'CoreMedia','MediaPlayer','AVFoundation','AVKit','JavaScriptCore','GLKit','OpenGLES','CoreText','QuartzCore','CoreGraphics'
  
  s.default_subspec='WeexCore'

  s.subspec 'WeexCore' do |w|
    w.source_files = 'weex_core/Source/base/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/core/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/wson/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/third_party/**/*.{h,hpp,m,mm,c,cpp,cc}',
                    'weex_core/Source/include/**/*.{h,hpp,m,mm,c,cpp,cc}'
    w.exclude_files = 'weex_core/Source/**/*android.{h,hpp,m,mm,c,cpp,cc}'

    w.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => ['${PODS_ROOT}/Headers/Public/WeexSDK/core/**'] }
    w.header_mappings_dir = 'weex_core/Source'

    w.libraries = "c++"
  end

end

           

然後 pod install 成功

7 把 js 檔案拖入到 build phases->Copy bundle Resouce 裡面,點選+ add other

下面就可以編譯 ,運作,調試 week 項目了。然後要不要入 vue.js的項目坑呢???????

總結

縱觀自己的坑,一個錯誤犯了看文檔不仔細的毛病,由于被上司強制安排這個任務,打亂了本來的計劃,又接入過大量的其它發SDK,就認為這個接入也是大概相似的,結果,一路坑,一路泥的狼狽不堪,第二個還是有自己對 pod 的不了解,隻知道有這麼一個工具,從來沒有深入研究過,知其然不知起是以然,走了不少彎路,對于一個穩定的 SDK 夠用,對于一個滿是坑的文檔,隻能是跳進去,再跳出來了,不過也學了不少東西。