/*
* Copyright 2014-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.apple.xcode.xcspec;
import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
import com.dd.plist.NSString;
import com.dd.plist.PropertyListParser;
import com.google.common.collect.ImmutableMap;
import java.io.InputStream;
/** Parsing logic for SDKSettings property list file that ships with Xcode. */
public final class SDKSettings {
/** Key into the default properties dictionary for the default compiler identifier. */
public static final String DEFAULT_COMPILER_KEY = "DEFAULT_COMPILER";
private static final String DEFAULT_PROPERTIES_KEY = "DefaultProperties";
// Utility class. Do not instantiate.
private SDKSettings() {}
/**
* Parses the contents of the provided SDKSettings.plist input stream and extracts the dictionary
* of DefaultProperties values.
*/
public static void parseDefaultPropertiesFromPlist(
InputStream sdkSettingsPlist, ImmutableMap.Builder<String, String> defaultPropertiesBuilder)
throws Exception {
NSObject sdkSettings = PropertyListParser.parse(sdkSettingsPlist);
if (!(sdkSettings instanceof NSDictionary)) {
throw new RuntimeException(
"Unexpected SDKSettings.plist contents (expected NSDictionary, got " + sdkSettings + ")");
}
getDefaultPropertiesFromNSDictionary((NSDictionary) sdkSettings, defaultPropertiesBuilder);
}
private static void getDefaultPropertiesFromNSDictionary(
NSDictionary sdkSettingsDict, ImmutableMap.Builder<String, String> defaultPropertiesBuilder) {
NSObject defaultProperties = sdkSettingsDict.objectForKey(DEFAULT_PROPERTIES_KEY);
if (!(defaultProperties instanceof NSDictionary)) {
throw new RuntimeException(
"Unexpected "
+ DEFAULT_PROPERTIES_KEY
+ " contents (expected NSDictionary, got "
+ defaultProperties
+ ")");
}
NSDictionary defaultPropertiesDict = (NSDictionary) defaultProperties;
for (String key : defaultPropertiesDict.allKeys()) {
NSObject value = defaultPropertiesDict.objectForKey(key);
if (!(value instanceof NSString)) {
throw new RuntimeException(
"Unexpected key " + key + " contents (expected NSString, got " + value + ")");
}
NSString stringValue = (NSString) value;
defaultPropertiesBuilder.put(key, stringValue.toString());
}
}
}