     
     public required init(from decoder: Decoder) throws {
         let container = try decoder.container(keyedBy: CodingKeys.self)
-        self.buildConfigurations = (try container.decodeIfPresent(.buildConfigurations)) ?? []
-        let defaultConfigurationIsVisibleString: String = try container.decode(.defaultConfigurationIsVisible)
-        self.defaultConfigurationIsVisible = UInt(defaultConfigurationIsVisibleString) ?? 0
-        self.defaultConfigurationName = try container.decode(.defaultConfigurationName)
+        self.buildConfigurations = try container.decode(.buildConfigurations)
+        let defaultConfigurationIsVisibleString: String? = try container.decodeIfPresent(.defaultConfigurationIsVisible)
+        self.defaultConfigurationIsVisible = defaultConfigurationIsVisibleString.flatMap(UInt.init)
+        self.defaultConfigurationName = try container.decodeIfPresent(.defaultConfigurationName)
         try super.init(from: decoder)
     }
     

        dictionary["buildConfigurations"] = .array(buildConfigurations
            .map { .string(CommentedString($0, comment: proj.configName(from: $0)))
        })
        dictionary["defaultConfigurationIsVisible"] = .string(CommentedString("\(defaultConfigurationIsVisible)"))
        dictionary["defaultConfigurationName"] = .string(CommentedString(defaultConfigurationName))
        return (key: CommentedString(self.reference,
                                                 comment: plistComment(proj: proj)),
                value: .dictionary(dictionary))

    ///   - defaultConfigurationIsVisible: default configuration is visible.
    public init(reference: String,
                buildConfigurations: [String],
                defaultConfigurationName: String? = nil,
                defaultConfigurationIsVisible: UInt? = nil) {
        self.buildConfigurations = buildConfigurations
        self.defaultConfigurationName = defaultConfigurationName
        self.defaultConfigurationIsVisible = defaultConfigurationIsVisible
