Merge pull request #41 from TouchInstinct/ios_build_scripts

Add iOS build phase scripts
This commit is contained in:
Alexey Gerasimov 2018-01-25 15:37:46 +03:00 committed by GitHub
commit 9bda77f33c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 255 additions and 0 deletions

152
xcode/.swiftlint.yml Normal file
View File

@ -0,0 +1,152 @@
opt_in_rules:
- closure_spacing
- closure_end_indentation
- conditional_returns_on_newline
- empty_count
- explicit_init
- extension_access_modifier
- fatal_error_message
- file_header
- first_where
- force_unwrapping
- implicit_return
- let_var_whitespace
- multiline_parameters
- nimble_operator - discuss
- number_separator
- object_literal
- overridden_super_call
- private_outlet
- prohibited_super_call
- redundant_nil_coalescing
- unneeded_parentheses_in_closure_argument
- vertical_parameter_alignment_on_call
excluded:
- Carthage
- Pods
- Generated
line_length: 128
cyclomatic_complexity:
ignores_case_statements: true
type_body_length:
- 500 # warning
- 700 # error
file_length:
warning: 500
error: 1200
function_parameter_count:
error: 5
identifier_name:
excluded:
- id
- ok
- URL
- x
- y
- z
warning_threshold: 1
custom_rules:
uiwebview_disabled:
included: ".*.swift"
name: "UIWebView Usage Disabled"
regex: 'UIWebView'
message: "Do not use UIWebView. Use WKWebView Instead. https://developer.apple.com/reference/uikit/uiwebview"
severity: error
native_print:
name: "print -> DDLog"
regex: '(print|NSLog)\('
message: "Please use CocoaLumberjack instead `print` and `NSlog`"
severity: error
zero:
name: "Short .zero"
regex: '\(top: 0, left: 0, bottom: 0, right: 0\)'
message: "Please use short init `.zero`."
severity: error
private_variable:
name: "Private variable"
regex: '(?<!private\s\w*)let\s\w*(:|(\s=))\sVariable'
message: "Please use (file)private with variable."
severity: error
let_variable:
name: "Let Variable"
regex: 'var\s\w*(:|(\s=))\sVariable'
message: "Please make variable using `let`."
severity: error
marks_style:
name: "Marks"
regex: '// MARK: -?[a-zA-Z0-9]'
message: "Marks should follow the following structure: // MARK: - Comment."
severity: warning
no_header_comments:
name: "Header Comments"
regex: '//\s*Created by.*\s*//\s*Copyright'
match_kinds:
- comment
message: "Template header comments should be removed."
delegate:
name: "Delegate"
regex: '(?<!weak\s)var\s\w*(D|d)elegate\w*:'
message: "Please use `weak` for `delegate`. "
severity: error
unnecessary_type:
name: "Unnecessary Type"
regex: '[ @a-zA-Z]*(?:let|var)\s\w*: ([a-zA-Z0-9]*)\?? = \1'
message: "Type definition not needed"
severity: error
unowned:
name: "Unowned"
regex: 'unowned'
message: "Please use `weak` instead. "
severity: error
inout_keyword:
name: "Inout"
regex: 'inout'
message: "Don't use inout arguments"
severity: error
match_kinds: keyword
continue_keyword:
name: "Continue"
regex: 'continue'
message: "Don't use continue instruction"
severity: error
match_kinds: keyword
cyrillic_strings:
name: "Cyrillic strings"
regex: '[а-яА-Я]+'
message: "Localize or translate"
severity: error
match_kinds:
- identifier
- string

View File

@ -0,0 +1,10 @@
<?php
foreach (simplexml_load_file('cpd-output.xml')->duplication as $duplication) {
$files = $duplication->xpath('file');
foreach ($files as $file) {
echo $file['path'].':'.$file['line'].':1: warning: '.$duplication['lines'].' copy-pasted lines from: '
.implode(', ', array_map(function ($otherFile) { return $otherFile['path'].':'.$otherFile['line']; },
array_filter($files, function ($f) use (&$file) { return $f != $file; }))).PHP_EOL;
}
}
?>

View File

@ -0,0 +1,15 @@
file_name=$1
file_link=$2
folder="Downloads"
file_path="./${folder}/${file_name}"
# make folder if not exist
if ! [ -e ${folder} ]; then
mkdir ${folder}
fi
# download file if not downloaded
if ! [ -e ${file_path} ]; then
curl -L ${file_link} -o ${file_path}
fi

View File

@ -0,0 +1,48 @@
<?php
$PROJECT_NAME = $argv[1];
$COMMON_STRINGS_PATH = $argv[2];
function createFolder($path) {
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
}
$localization = './'.$PROJECT_NAME.'/Resources/Localization/';
foreach (glob($COMMON_STRINGS_PATH.'/*.json') as $file) {
$languageName = array_pop(explode('_', basename($file, '.json')));
$isBase = strpos($file, 'default') !== false;
$jsonFile = file_get_contents($file);
$json = json_decode($jsonFile);
$ios_strings = "";
foreach ($json as $key=>$value) {
$ios_strings.='"'.$key.'" = "'.str_replace('%s', '%@', str_replace('"','\"', str_replace("\n", '\n', $value))).'";'.PHP_EOL;
}
$ios_strings = preg_replace('/(\\\\)(u)(\d{4})/', '$1U$3', $ios_strings);
$lproj = $localization.$languageName.'.lproj/';
createFolder($lproj);
file_put_contents($lproj.'Localizable.strings', $ios_strings);
if($isBase) {
createFolder($localization.'Base.lproj/');
file_put_contents($localization.'Base.lproj/Localizable.strings', $ios_strings);
$ios_swift_strings = 'import Foundation'.PHP_EOL.
'import LeadKit'.PHP_EOL.PHP_EOL.
'// swiftlint:disable superfluous_disable_command'.PHP_EOL.
'// swiftlint:disable line_length'.PHP_EOL.
'// swiftlint:disable file_length'.PHP_EOL.
'// swiftlint:disable identifier_name'.PHP_EOL.PHP_EOL.
'extension String {'.PHP_EOL;
foreach ($json as $key=>$value) {
$value_without_linefeed = preg_replace("/\r|\n/", " ", $value);
$ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = "'.$key.'".localized()'."\n".PHP_EOL;
}
$ios_swift_strings .= '}'.PHP_EOL;
file_put_contents($localization.'String+Localization.swift', $ios_swift_strings);
}
}
?>

View File

@ -0,0 +1,9 @@
VERSION=$1
FILE_NAME="api-generator-${VERSION}.jar"
# download api generator
link="https://dl.bintray.com/touchin/touchin-tools/ru/touchin/api-generator/${VERSION}/${FILE_NAME}"
. build-scripts/xcode/aux_scripts/download_file.sh ${FILE_NAME} ${link}
# execute api generator
java -jar "Downloads/${FILE_NAME}" --specification-path common/api --output-path ${PROJECT_NAME}/Generated --templates-path api-generator-templates/Swift --action generate-client-code --single-file true

View File

@ -0,0 +1,6 @@
# running CPD
echo ${EXECUTABLE_NAME}
pmd cpd --files ${EXECUTABLE_NAME} --exclude ${EXECUTABLE_NAME}/Generated --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer > cpd-output.xml --failOnViolation true
# running script
php ./build-scripts/xcode/aux_scripts/cpd_script.php -cpd-xml cpd-output.xml

View File

@ -0,0 +1,14 @@
LOCALIZATION_PATH="${PROJECT_NAME}/Resources/Localization"
STRINGS_FOLDER="common/strings"
if ! [ -e ${LOCALIZATION_PATH} ]; then
echo "${PROJECT_DIR}/${LOCALIZATION_PATH} path does not exist. Add these folders and try again."
exit 1
fi
if ! [ -e "${PROJECT_DIR}/${STRINGS_FOLDER}" ]; then
echo "${PROJECT_DIR}/${STRINGS_FOLDER} path does not exist. Submodule with strings should be named common and contain strings folder."
exit 1
fi
php build-scripts/xcode/aux_scripts/import_strings.php ${PROJECT_NAME} ${STRINGS_FOLDER}

View File

@ -0,0 +1 @@
${PODS_ROOT}/SwiftLint/swiftlint autocorrect --path ${PROJECT_NAME} && ${PODS_ROOT}/SwiftLint/swiftlint --path ${PROJECT_NAME} --config ${PROJECT_DIR}/build-scripts/xcode/.swiftlint.yml