質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Swift

    7251questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    4101questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    3998questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Root.plistの修正方法に関しまして

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 247

kawa2725

score 1

 前提・実現したいこと

初めまして。
当方iOSはあまり馴染みがないため、説明で不十分なところがあるかもしれませんが、目を通して頂ければ幸いです。

現在Swift3でアプリ開発を行っているのですが、iOS標準の設定アプリから現在作成しているアプリの各設定値に対して任意にデフォルト値を変更できるようにしたいと考えています。
例)設定アプリからハンドルネームを入力、アプリ起動時はそのハンドルネームをユーザデフォルトとして保持して、各機能で使用

すでにアプリのバージョン情報やライセンスの表記については実装されており、Xcode上からもSettings.bundleAcknowledgements.plistなどのファイルは確認できています。
そのため今回はRoot.plistに対し、新規にグループとテキストボックスを配置しビルドを行えばいいのかと考えていたのですが、ビルドすると後述のエラーが発生いたしました。

エラーの発生原因や対応方法など教えていただけると助かります。

 発生している問題・エラーメッセージ

Set: Entry, ":PreferenceSpecifiers:2:DefaultValue", Does Not Exist
Command /bin/sh failed with exit code 1

Set: Entry, ":PreferenceSpecifiers:2:DefaultValue", Does Not Exist

 該当のソースコード

Swift3

<?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>StringsTable</key>
    <string>Root</string>
    <key>PreferenceSpecifiers</key>
    <array>
        /*** ここから新規追加 ***/
        <dict>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>Title</key>
            <string>User Info.</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
            <key>Title</key>
            <string>Handle Name</string>
            <key>Key</key>
            <string>idName</string>
            <key>DefaultValue</key>
            <string>xxxxx</string>
        </dict>
        /*** ここまで新規追加 ***/
        <dict>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>Title</key>
            <string>Application Info.</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTitleValueSpecifier</string>
            <key>Title</key>
            <string>Version</string>
            <key>Key</key>
            <string>idAppVersion</string>
            <key>DefaultValue</key>
            <string>1.0</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTitleValueSpecifier</string>
            <key>Title</key>
            <string>Build</string>
            <key>Key</key>
            <string>idAppBuild</string>
            <key>DefaultValue</key>
            <string>1.0</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSChildPaneSpecifier</string>
            <key>Title</key>
            <string>Acknowledgements</string>
            <key>File</key>
            <string>Acknowledgements</string>
        </dict>
    </array>
</dict>
</plist>

 補足情報(FW/ツールのバージョンなど)

以下、使用しているFWです。
・RealmSwift
・RxSwift
・RxCocoa
・SwiftyJSON
・ObjectMapper
・Alamofire

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

以下で試して見てください

 Root.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>StringsTable</key>
        <string>Root</string>
        <key>PreferenceSpecifiers</key>
        <array>
            <dict>
                <key>Type</key>
                <string>PSTextFieldSpecifier</string>
                <key>Title</key>
                <string>Text Field</string>
                <key>Key</key>
                <string>textfieldID001</string>
            </dict>
            <dict>
                <key>Type</key>
                <string>PSGroupSpecifier</string>
                <key>Title</key>
                <string>Application Info.</string>
            </dict>
            <dict>
                <key>Type</key>
                <string>PSTitleValueSpecifier</string>
                <key>Title</key>
                <string>Version</string>
                <key>Key</key>
                <string>idAppVersion</string>
                <key>DefaultValue</key>
                <string>1.0</string>
            </dict>
            <dict>
                <key>Type</key>
                <string>PSTitleValueSpecifier</string>
                <key>Title</key>
                <string>Build</string>
                <key>Key</key>
                <string>idAppBuild</string>
                <key>DefaultValue</key>
                <string>1.0</string>
            </dict>
            <dict>
                <key>Type</key>
                <string>PSChildPaneSpecifier</string>
                <key>Title</key>
                <string>Acknowledgements</string>
                <key>File</key>
                <string>Acknowledgements</string>
            </dict>
        </array>
    </dict>
</plist>

 アプリ側

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {

        let settingsText = UserDefaults.standard.string(forKey: "textfieldID001")
        //=> settingsText(設定で入力した値)
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/13 10:29

    エラーになることなく無事に実装できました!
    既存ソースを見てグループは必須だと思っていたので勘違いしていたのですね。。

    アプリ側まで配慮していただき非常に助かりました。ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7251questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    4101questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    3998questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。