/*
* Copyright 2015-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.simulator;
import com.dd.plist.NSArray;
import com.dd.plist.NSDictionary;
import com.dd.plist.NSNumber;
import com.dd.plist.NSObject;
import com.dd.plist.PropertyListParser;
import com.facebook.buck.log.Logger;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;
/** Utility class to parse profile.plist from an iPhone simulator platform. */
public class AppleSimulatorProfileParsing {
private static final Logger LOG = Logger.get(AppleSimulatorProfileParsing.class);
// Utility class, do not instantiate.
private AppleSimulatorProfileParsing() {}
public static Optional<AppleSimulatorProfile> parseProfilePlistStream(InputStream inputStream)
throws IOException {
NSDictionary profile;
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {
try {
profile = (NSDictionary) PropertyListParser.parse(bufferedInputStream);
} catch (Exception e) {
throw new IOException(e);
}
}
NSObject supportedProductFamilyIDsObject = profile.objectForKey("supportedProductFamilyIDs");
if (!(supportedProductFamilyIDsObject instanceof NSArray)) {
LOG.warn(
"Invalid simulator profile.plist (supportedProductFamilyIDs missing or not an array)");
return Optional.empty();
}
NSArray supportedProductFamilyIDs = (NSArray) supportedProductFamilyIDsObject;
AppleSimulatorProfile.Builder profileBuilder = AppleSimulatorProfile.builder();
for (NSObject supportedProductFamilyID : supportedProductFamilyIDs.getArray()) {
if (supportedProductFamilyID instanceof NSNumber) {
profileBuilder.addSupportedProductFamilyIDs(
((NSNumber) supportedProductFamilyID).intValue());
} else {
LOG.warn(
"Invalid simulator profile.plist (supportedProductFamilyIDs contains non-number %s)",
supportedProductFamilyID);
return Optional.empty();
}
}
NSObject supportedArchsObject = profile.objectForKey("supportedArchs");
if (!(supportedArchsObject instanceof NSArray)) {
LOG.warn("Invalid simulator profile.plist (supportedArchs missing or not an array)");
return Optional.empty();
}
NSArray supportedArchs = (NSArray) supportedArchsObject;
for (NSObject supportedArch : supportedArchs.getArray()) {
profileBuilder.addSupportedArchitectures(supportedArch.toString());
}
return Optional.of(profileBuilder.build());
}
}