2012-04-10 13 views
2

PhoneGap Buildは、ビルドオプション(config.xml)を構成するためのXMLファイルとともに、HTML + JS + CSSソースを使用するサービス(ベータ版では現在無料)サポートされているすべてのプラットフォーム(iOS、Android、Blackberry、Symbian、WebOS)用にビルドされています。これは膨大な時間を節約し、頭痛の薬にたくさんのお金を節約します。残念ながらANTを使用してXMLタグ全体を置換する

there is inconsistent behavior with the way links to external websites work

は現在、外部ブラウザで開いてリンクを持つためには、PhoneGapのビルドに異なるコードをアップロードする必要があり。 iOSの場合はドメインをホワイトリストに登録する必要があり、Androidの場合はドメインを非公開にする必要があります。

includeForAndroid = "false"のようなアクセスタグに属性を追加することで一貫性を持たせることができます(Androidのアクセスタグの内容は含まれないため、iOSと同様に外部ブラウザでリンクが開きます) 。

Config.xml docs;ここにa relevant blog postがあります。

従業員によって提案された修正プログラムがありますが、それは製品に作られ、リリースされる、まだあります

私たちは、これはコルドバのオープンソースプロジェクトにまっすぐに得ることを望んだ。その間にAndroid上のタグが含まれていますが、iOSの意志ではないでしょう

<access origin="*" onlyInBrowser="true" /> 

:、PhoneGapのビルドのために、私はこのような何かを考えています。

この変更が行われ、製品で利用できるようになるまで、私はアップロードする2つのzipファイルを作成します.1つはAndroid用(アクセスタグなし)と1(iOS用) )。理想的ではありませんが、一貫したアプリの振る舞いをするためにはどうしなければなりません。

私は既にANTを使ってこのプロジェクト内の多くのタスクを自動化していますので、ANTが私のためにconfig.xmlの更新を行うことができれば理想的です。参考のため

は、ここ2つのジッパーを構築するだろう、私のANTのコードは次のとおりです。

<target name="BUILD-ZIP" depends="verify-using-minified-js,prepare-for-build"> 

    <tstamp> 
     <format property="build.tstamp" pattern="yyyy-MM-dd__HH-mm-ss" /> 
    </tstamp> 

    <antcall target="zip-ios"> 
     <param name="tstamp" value="${build.tstamp}" /> 
    </antcall> 

    <!-- build android second so that we can just remove the access tags --> 
    <antcall target="zip-android"> 
     <param name="tstamp" value="${build.tstamp}" /> 
    </antcall> 

</target> 

<target name="zip-ios"> 
    <zip destfile="${dir.pkg.phonegap}${tstamp}-apple.zip"> 
     <zipfileset dir="${dir.pkg.tmp}"> 
      <exclude name="build.xml" /> 
      <exclude name="build.properties" /> 
      <exclude name="settings.xml" /> 
      <exclude name=".project" /> 
      <exclude name="**/*.psd" /> 
      <exclude name="assets/js/app.js" /> 
      <exclude name="assets/js/cordova-1.5.0.js" /> 
     </zipfileset> 
    </zip> 
</target> 

<target name="zip-android"> 

    <!-- before building android zip, get rid of the <access> tags --> 

    <zip destfile="${dir.pkg.phonegap}${tstamp}-android.zip"> 
     <zipfileset dir="${dir.pkg.tmp}"> 
      <exclude name="build.xml" /> 
      <exclude name="build.properties" /> 
      <exclude name="settings.xml" /> 
      <exclude name=".project" /> 
      <exclude name="**/*.psd" /> 
      <exclude name="assets/js/app.js" /> 
      <exclude name="assets/js/cordova-1.5.0.js" /> 
     </zipfileset> 
    </zip> 
</target> 

<target name="prepare-for-build"> 

    <!-- increment build number --> 
    <propertyfile file="build.properties"> 
     <entry key="version.build.number" type="int" operation="+" default="1"/> 
    </propertyfile> 
    <property file="build.properties"/> 
    <echo message="BUILD NUMBER: ${version.build.number}"/> 

    <delete includeemptydirs="true" verbose="false"> 
     <fileset dir="${dir.pkg.tmp}" includes="**/*"/> 
    </delete> 
    <filter token="BUILD_NUMBER" value="${version.build.number}" /> 
    <filter token="VERSION_MAJOR" value="${version.major}" /> 
    <filter token="VERSION_MINOR" value="${version.minor}" /> 
    <copy todir="${dir.pkg.tmp}" verbose="true" overwrite="true" filtering="true"> 
     <fileset dir="${dir.dev}" includes="**/*" /> 
    </copy> 

</target> 

そこでのコメントはzip-androidターゲットに、あります:私は何をしたい場所を

<!-- before building android zip, get rid of the <access> tags --> 

です交換。私は<filter>タスクと<replace><replaceRegExp>のようなタスクを試してみましたが、私はそれを行う方法が見つからないと思います。文字列を置き換える必要があるという事実に尽きます。<access ... />置換メソッドは、token/match/etc属性に<または>を許可するように見えます。私はCDATAを使用しようとしましたが、それを動作させることはできませんでした。

私が来ている最も近い、すべてのエラーをスローしないことANTで、このです:

<replace file="${dir.pkg.tmp}config.xml" failOnNoReplacements="true"> 
    <replacetoken> 
     <![CDATA[<access origin="http://example.com" subdomains="true" />]]> 
    </replacetoken> 
</replace> 

は理論的には、これは空の文字列、because I've omitted the value attributeで指定<access ... />タグを置き換えます。

残念ながら、それはfailOnNoReplacements属性と何らかの理由で何も置き換えられていないという事実のため失敗します。

これは可能ですか?もしそうなら、何が間違っているのですか?

答えて

1

ハ、私は、角かっこのブロックを回避するソリューションをまとめました。 config.xmlに

:build.xmlの中

<!--access_tag1_here--> 

<replace 
    file="${dir.pkg.tmp}config.xml" 
    failOnNoReplacements="true" 
    token="!--access_tag1_here--" 
    value="access origin='http://example.com' subdomains='true' /" 
    /> 

これは、必要なアクセスタグへのコメントを変換します。

コメントがまだコメントであり、iOSのzipプロセスがアクセスタグを挿入している間にAndroidが最初に進むように私のジップ順を変更しました。

3

Antはあなたが両方のトークンと値にXML文字列の要素をエンコードする場合は、タスクが動作します置き換えます...例えば:build.xmlの

でconfig.xmlに

<option name="some.unwanted.configuration" /> 

<!-- unwanted configuration removed --> 
で210
<replace file="${build.dir}/config.xml" 
     token="&lt;option name=&quot;some.unwanted.configuration&quot; /&gt;" 
     value="&lt;!-- unwanted configuration removed --&gt;" 
    /> 

結果

関連する問題