Integrate the 'VerifyNoBuildSettings' script
This commit is contained in:
parent
a10a9145fa
commit
d7f0c26a82
|
@ -1927,10 +1927,11 @@
|
||||||
849C645C1ED37A5D003D8FC0 /* Sources */,
|
849C645C1ED37A5D003D8FC0 /* Sources */,
|
||||||
849C645D1ED37A5D003D8FC0 /* Frameworks */,
|
849C645D1ED37A5D003D8FC0 /* Frameworks */,
|
||||||
849C645E1ED37A5D003D8FC0 /* Resources */,
|
849C645E1ED37A5D003D8FC0 /* Resources */,
|
||||||
84C987A52000AC9E0066B150 /* ShellScript */,
|
84C987A52000AC9E0066B150 /* Run Script: Automated build numbers */,
|
||||||
84B06F681ED37B9000F0B54B /* Embed Frameworks */,
|
84B06F681ED37B9000F0B54B /* Embed Frameworks */,
|
||||||
6581C75720CED60100F4AD34 /* Embed App Extensions */,
|
6581C75720CED60100F4AD34 /* Embed App Extensions */,
|
||||||
8423E3E3220158E700C3795B /* ShellScript */,
|
D519E77022EE5B4100923F27 /* Run Script: Verify No Build Settings */,
|
||||||
|
8423E3E3220158E700C3795B /* Run Script: codesign release builds */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -2292,7 +2293,7 @@
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
8423E3E3220158E700C3795B /* ShellScript */ = {
|
8423E3E3220158E700C3795B /* Run Script: codesign release builds */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -2301,6 +2302,7 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
|
name = "Run Script: codesign release builds";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
|
@ -2309,19 +2311,38 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "# See https://github.com/Watson1978/kotori/commit/ffe320f2e058828f0af294b65ed88dfd7baaabff\n\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n codesign --verbose --force --deep -o runtime --sign \"Developer ID Application: Brent Simmons\" \"${CODESIGNING_FOLDER_PATH}/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/AutoUpdate.app\"\nfi\n";
|
shellScript = "# See https://github.com/Watson1978/kotori/commit/ffe320f2e058828f0af294b65ed88dfd7baaabff\n\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n codesign --verbose --force --deep -o runtime --sign \"Developer ID Application: Brent Simmons\" \"${CODESIGNING_FOLDER_PATH}/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/AutoUpdate.app\"\nfi\n";
|
||||||
};
|
};
|
||||||
84C987A52000AC9E0066B150 /* ShellScript */ = {
|
84C987A52000AC9E0066B150 /* Run Script: Automated build numbers */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
|
name = "Run Script: Automated build numbers";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "# See https://blog.curtisherbert.com/automated-build-numbers/\n\ngit=`sh /etc/profile; which git`\nbranch_name=`$git symbolic-ref HEAD | sed -e 's,.*/\\\\(.*\\\\),\\\\1,'`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\nsimple_branch_name=`$git rev-parse --abbrev-ref HEAD`\n\nbuild_number=\"$git_count\"\nif [ $CONFIGURATION != \"Release\" ]; then\nbuild_number+=\"-$simple_branch_name\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n";
|
shellScript = "# See https://blog.curtisherbert.com/automated-build-numbers/\n\ngit=`sh /etc/profile; which git`\nbranch_name=`$git symbolic-ref HEAD | sed -e 's,.*/\\\\(.*\\\\),\\\\1,'`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\nsimple_branch_name=`$git rev-parse --abbrev-ref HEAD`\n\nbuild_number=\"$git_count\"\nif [ $CONFIGURATION != \"Release\" ]; then\nbuild_number+=\"-$simple_branch_name\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n";
|
||||||
};
|
};
|
||||||
|
D519E77022EE5B4100923F27 /* Run Script: Verify No Build Settings */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "Run Script: Verify No Build Settings";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "xcrun -sdk macosx swiftc -target x86_64-macosx10.11 buildscripts/VerifyNoBuildSettings.swift -o $CONFIGURATION_TEMP_DIR/VerifyNoBS\n$CONFIGURATION_TEMP_DIR/VerifyNoBS ${PROJECT_NAME}.xcodeproj/project.pbxproj\n";
|
||||||
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
#!/usr/bin/swift
|
||||||
|
|
||||||
|
// This script is originally from github.com/olofhellman/VerifyNoBS
|
||||||
|
// The idea is that all build settings should be kept in .xcconfig files,
|
||||||
|
// rather than in the xcode pbxproj file inside an Xcode project bundle
|
||||||
|
// Having the script run as part of a regular build ensures that the project file
|
||||||
|
// doesn't accidentally accumulate build settings
|
||||||
|
|
||||||
|
import Darwin
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
func reportError(message: String) {
|
||||||
|
print("error message was \(message)")
|
||||||
|
let stderr = FileHandle.standardError
|
||||||
|
if let data = message.data(using: String.Encoding.utf8, allowLossyConversion: false) {
|
||||||
|
stderr.write(data)
|
||||||
|
} else {
|
||||||
|
print("there was an error. script \"VerifyNoBuildSettings\" could not convert error message to printable string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ProcessXcodeprojResult {
|
||||||
|
case FoundBuildSettings([String])
|
||||||
|
case Error(String)
|
||||||
|
case OK(String)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func processXcodeprojAt(url: URL) -> ProcessXcodeprojResult {
|
||||||
|
let startTime = Date()
|
||||||
|
guard let xcodeproj = try? String(contentsOf: url, encoding: String.Encoding.utf8) else {
|
||||||
|
return .Error("script \"VerifyNoBuildSettings\" failed making xcodeproj from url")
|
||||||
|
}
|
||||||
|
let lines = xcodeproj.components(separatedBy: CharacterSet.newlines)
|
||||||
|
print ("found \(lines.count) lines")
|
||||||
|
|
||||||
|
var badLines: [String] = []
|
||||||
|
var inBuildSettingsBlock = false
|
||||||
|
for nthLine in lines {
|
||||||
|
if inBuildSettingsBlock {
|
||||||
|
if let _ = nthLine.range(of:"\\u007d[:space:]*;", options: .regularExpression) {
|
||||||
|
inBuildSettingsBlock = false
|
||||||
|
} else if let _ = nthLine.range(of:"CODE_SIGN_IDENTITY") {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
badLines.append(nthLine)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if let _ = nthLine.range(of:"buildSettings[:space:]*=", options: .regularExpression) {
|
||||||
|
inBuildSettingsBlock = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let timeInterval = Date().timeIntervalSince(startTime)
|
||||||
|
print ("process took \(timeInterval) seconds")
|
||||||
|
if (badLines.count > 0) {
|
||||||
|
return .FoundBuildSettings(badLines)
|
||||||
|
}
|
||||||
|
return .OK(":-)")
|
||||||
|
}
|
||||||
|
print("Verifying no buildSettings...")
|
||||||
|
|
||||||
|
let commandLineArgs = CommandLine.arguments
|
||||||
|
print("processArgs were \(commandLineArgs)")
|
||||||
|
let xcodeprojfilepath = commandLineArgs[1]
|
||||||
|
let myUrl = URL(fileURLWithPath:xcodeprojfilepath)
|
||||||
|
let result = processXcodeprojAt(url: myUrl)
|
||||||
|
|
||||||
|
switch result {
|
||||||
|
case .Error(let str):
|
||||||
|
reportError (message: "error script \"VerifyNoBuildSettings\" encountered an error: \(str)")
|
||||||
|
exit(EXIT_FAILURE)
|
||||||
|
case .FoundBuildSettings(let badLines):
|
||||||
|
reportError (message: "script \"VerifyNoBuildSettings\" found build settings in the project file:")
|
||||||
|
for badLine in badLines {
|
||||||
|
reportError (message: " \(badLine)\n")
|
||||||
|
}
|
||||||
|
exit(EXIT_FAILURE)
|
||||||
|
case .OK:
|
||||||
|
print ("script \"VerifyNoBuildSettings\" verified the project contained no buildSettings")
|
||||||
|
exit(EXIT_SUCCESS)
|
||||||
|
}
|
|
@ -1,9 +1,6 @@
|
||||||
// If a warning is commented out in this list, it is a candidate for uncommenting
|
|
||||||
// that we just aven't gotten to yet
|
|
||||||
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO
|
ALWAYS_SEARCH_USER_PATHS = NO
|
||||||
CLANG_ANALYZER_NONNULL = YES
|
CLANG_ANALYZER_NONNULL = YES
|
||||||
// CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
|
CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
|
||||||
CLANG_CXX_LIBRARY = libc++
|
CLANG_CXX_LIBRARY = libc++
|
||||||
CLANG_ENABLE_MODULES = YES
|
CLANG_ENABLE_MODULES = YES
|
||||||
|
@ -28,7 +25,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES
|
CLANG_WARN_STRICT_PROTOTYPES = YES
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES
|
CLANG_WARN_SUSPICIOUS_MOVE = YES
|
||||||
// CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES
|
CLANG_WARN_UNREACHABLE_CODE = YES
|
||||||
COPY_PHASE_STRIP = NO
|
COPY_PHASE_STRIP = NO
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES
|
ENABLE_STRICT_OBJC_MSGSEND = YES
|
||||||
|
|
Loading…
Reference in New Issue