apphx 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -8
- package/dist/cli.js +41 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.js +4 -2
- package/dist/config.js.map +1 -1
- package/dist/integrations.js +154 -95
- package/dist/integrations.js.map +1 -1
- package/dist/notify.js +267 -0
- package/dist/notify.js.map +1 -0
- package/dist/runner.js +119 -20
- package/dist/runner.js.map +1 -1
- package/dist/schemas.js +57 -2
- package/dist/schemas.js.map +1 -1
- package/dist/vendor/obfuscator/dist/config.js +119 -6
- package/dist/vendor/obfuscator/dist/config.js.map +1 -1
- package/dist/vendor/obfuscator/dist/dfa.js +528 -0
- package/dist/vendor/obfuscator/dist/dfa.js.map +1 -0
- package/dist/vendor/obfuscator/dist/flutter.js +3266 -0
- package/dist/vendor/obfuscator/dist/flutter.js.map +1 -0
- package/dist/vendor/obfuscator/dist/image-utils.js +335 -0
- package/dist/vendor/obfuscator/dist/image-utils.js.map +1 -0
- package/dist/vendor/obfuscator/dist/junk.js +1501 -0
- package/dist/vendor/obfuscator/dist/junk.js.map +1 -0
- package/dist/vendor/obfuscator/dist/lexicon-data.js +972 -0
- package/dist/vendor/obfuscator/dist/lexicon-data.js.map +1 -0
- package/dist/vendor/obfuscator/dist/obfuscate.js +51 -2
- package/dist/vendor/obfuscator/dist/obfuscate.js.map +1 -1
- package/dist/vendor/obfuscator/dist/objc-symbols.js +1819 -0
- package/dist/vendor/obfuscator/dist/objc-symbols.js.map +1 -0
- package/dist/vendor/obfuscator/dist/project-identity.js +852 -0
- package/dist/vendor/obfuscator/dist/project-identity.js.map +1 -0
- package/dist/vendor/obfuscator/dist/string-encrypt.js +330 -0
- package/dist/vendor/obfuscator/dist/string-encrypt.js.map +1 -0
- package/examples/android-java.factory.json +40 -5
- package/examples/expo.factory.json +68 -5
- package/examples/flutter.factory.json +40 -4
- package/examples/luggage.json +1 -0
- package/examples/multi-role-agents.md +129 -0
- package/examples/mygo.factory.json +54 -4
- package/examples/queue-loop-demo.md +146 -0
- package/examples/react-native.factory.json +58 -5
- package/examples/roles.example.json +31 -0
- package/examples/swift.factory.json +60 -5
- package/examples/uni-app.factory.json +58 -5
- package/package.json +1 -1
- package/skills/apphx/SKILL.md +39 -4
- package/skills/apphx/resources/requirement.json +1 -0
- package/skills/apphx-obfuscator/LICENSE +21 -0
- package/skills/apphx-obfuscator/SKILL.md +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"junk.js","names":[],"sources":["../src/junk.ts"],"sourcesContent":["/**\n * Deterministic \"rubbish code injection + resource cleanup\" transforms:\n *\n * - insertJunkCode -> garbage methods into .h/.m/.mm/.swift\n * - createJunkFiles -> garbage .h/.m/.swift + pbxproj registration\n * - ObjC garbage-method template pool\n * - Swift garbage-method template pool\n * - unused-resource detection + cleanup\n * - ignorable-path predicate\n *\n * All randomness is seeded; `Math.random`, `Date.now` and `Math.random`-backed UUIDs are\n * never used. Identical arguments always produce byte-identical output.\n */\n\nimport { existsSync, mkdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport {\n basenameWithoutExtension,\n deriveUuid,\n extension,\n seededInt,\n writeIfChanged,\n type TransformOutcome,\n type WalkEntry,\n} from './common.js';\n\nconst DEFAULT_RUB_PREFIX = 'OBFObj';\n\n// ---------------------------------------------------------------------------\n// Deterministic lexicon stand-in for `random_word_from_lexicon()`.\n// ---------------------------------------------------------------------------\n\nconst LEXICON: readonly string[] = [\n 'amber', 'brisk', 'cobalt', 'dapper', 'eager', 'fable', 'glade', 'haven', 'ivory', 'jolly',\n 'kindle', 'lumen', 'maple', 'noble', 'opal', 'pearl', 'quill', 'raven', 'sable', 'tiger',\n 'umber', 'velvet', 'woven', 'xenon', 'yonder', 'zephyr', 'archer', 'bramble', 'cedar', 'drift',\n 'ember', 'falcon', 'grove', 'harbor', 'indigo', 'jasper', 'kestrel', 'linden', 'meadow', 'nimbus',\n 'onyx', 'petal', 'quartz', 'rune', 'saffron', 'talon', 'vale', 'willow', 'yarrow',\n 'azure', 'beacon', 'cinder', 'dusk', 'eclipse', 'frost', 'gale', 'hollow', 'iris', 'juniper',\n 'knoll', 'lagoon', 'mirage', 'nestle', 'oasis', 'pinnacle', 'ripple', 'solace', 'thicket',\n 'vista', 'wander', 'wisp', 'acre', 'birch', 'canyon', 'delta', 'elevation', 'fjord', 'glacier',\n 'highland', 'inlet', 'jetty', 'knob', 'ledge', 'marrow', 'notch', 'orchard', 'prairie', 'quarry',\n 'ridge', 'summit', 'terrace', 'uplands', 'verge', 'watershed', 'woodland', 'alder', 'basin', 'clearing',\n];\n\nfunction capitalize(value: string): string {\n return value.length === 0 ? value : value[0]!.toUpperCase() + value.slice(1);\n}\n\n/** Deterministic lowercase lexicon word (seed + salt). */\nexport function randomWord(seed: string, salt: string): string {\n return LEXICON[seededInt(seed, `lexicon:${salt}`, 0, LEXICON.length - 1)]!;\n}\n\n/** Deterministic title-cased lexicon word. */\nexport function randomWordTitle(seed: string, salt: string): string {\n return capitalize(randomWord(seed, salt));\n}\n\n/** Sequential deterministic RNG. Consumes salts in call order, mirroring Python's `random.*`. */\nclass Rng {\n private counter = 0;\n\n constructor(\n private readonly seed: string,\n private readonly scope: string,\n ) {}\n\n private salt(): string {\n const value = `${this.scope}:${this.counter}`;\n this.counter += 1;\n return value;\n }\n\n int(min: number, max: number): number {\n return seededInt(this.seed, this.salt(), min, max);\n }\n\n pick<T>(list: readonly T[]): T {\n return list[this.int(0, list.length - 1)]!;\n }\n\n word(): string {\n return randomWord(this.seed, this.salt());\n }\n\n wordTitle(): string {\n return capitalize(this.word());\n }\n\n wordUpper(): string {\n return this.word().toUpperCase();\n }\n\n /** Deterministic `random.sample(list, k)` (Fisher-Yates partial shuffle). */\n sample<T>(list: readonly T[], k: number): T[] {\n const items = [...list];\n const count = Math.min(Math.max(0, k), items.length);\n for (let i = 0; i < count; i += 1) {\n const j = i + this.int(0, items.length - 1 - i);\n const swap = items[i]!;\n items[i] = items[j]!;\n items[j] = swap;\n }\n return items.slice(0, count);\n }\n}\n\nfunction dateString(rng: Rng): string {\n const year = rng.int(2018, 2026);\n const month = rng.int(1, 12);\n const day = rng.int(1, 28);\n return `${year}/${String(month).padStart(2, '0')}/${String(day).padStart(2, '0')}`;\n}\n\n// ---------------------------------------------------------------------------\n// Shared type/name pools.\n// ---------------------------------------------------------------------------\n\nconst OBJC_FUN_HEAD_LIST: readonly string[] = [\n 'void', 'CGFloat', 'CGRect', 'NSInteger', 'NSString', 'NSArray', 'NSDictionary', 'NSNumber',\n 'NSURL', 'NSIndexPath', 'UIView', 'UIButton', 'UIDatePicker', 'UITextField', 'UISwitch',\n 'UISlider', 'UILabel', 'UIImageView', 'UIFont', 'UIColor',\n];\n\nconst SWIFT_FUN_HEAD_LIST: readonly string[] = [\n 'Void', 'Bool', 'CGFloat', 'CGRect', 'NSInteger', 'NSString', 'NSArray', 'NSDictionary',\n 'UIImage', 'NSURL', 'UIView', 'UIButton', 'UIDatePicker', 'UITextField', 'UISwitch',\n 'UISlider', 'UILabel', 'UIImageView', 'UIFont', 'UIColor',\n];\n\nconst SPORT_OBJ_LIST: readonly string[] = ['NSObject', 'UIView', 'UIViewController'];\n\nconst OBJC_NO_STARS: readonly string[] = ['void', 'CGFloat', 'CGRect', 'NSInteger'];\nconst OBJC_ASSIGN: readonly string[] = ['BOOL', 'CGFloat', 'CGRect', 'NSInteger'];\nconst OBJC_COPY: readonly string[] = ['NSString', 'NSArray', 'NSDictionary', 'UIImage', 'NSNumber', 'NSURL', 'NSIndexPath'];\nconst SWIFT_VAR_LIST: readonly string[] = ['BOOL', 'CGFloat', 'CGRect', 'NSInteger', 'NSString', 'UIColor', 'UIFont', 'NSURL'];\n\nconst PRO_COUNT = 3;\n\n// Cross-class import registry (unused/used maps).\ninterface ClassRegistry {\n unused: Map<string, string[]>;\n used: Map<string, string[]>;\n}\n\nfunction newRegistry(): ClassRegistry {\n return { unused: new Map(), used: new Map() };\n}\n\ninterface ObjCGenState {\n rubProMap: Map<string, string>;\n headerFiles: string[];\n registry: ClassRegistry;\n}\n\ninterface SwiftGenState {\n rubProMap: Map<string, string>;\n registry: ClassRegistry;\n}\n\n// ---------------------------------------------------------------------------\n// Exported result shapes.\n// ---------------------------------------------------------------------------\n\nexport interface ObjCJunk {\n /** Garbage method declarations for the `.h` file. */\n hCode: string;\n /** Garbage method bodies for the `.m` file. */\n mCode: string;\n /** `#import \"X.h\"` lines collected from cross-class references. */\n headerImportCode: string;\n /** Method-declaration list, for cross-class import registration. */\n hFunList: string[];\n}\n\nexport interface SwiftJunk {\n /** Lazy property code inserted after the class opening brace. */\n propertyCode: string;\n /** Garbage method bodies. */\n methodCode: string;\n /** `func ...` signature list, for cross-class import registration. */\n funList: string[];\n}\n\nexport interface JunkCodeOptions {\n /** Number of garbage methods per class. Default 1. */\n amount?: number;\n /** Method-name prefix. Default 'OBFObj'. */\n rubPrefix?: string;\n}\n\nexport interface JunkFileOptions {\n /** Number of garbage files to create. Default 1. */\n count?: number;\n /** Number of garbage methods per created file. Default 1. */\n amount?: number;\n /** Method-name prefix. Default 'OBFObj'. */\n rubPrefix?: string;\n /** Garbage file language. Default 'OC'. */\n language?: 'OC' | 'Swift';\n}\n\nexport interface CleanResourcesOptions {\n /** Resource names to keep (never delete). */\n ignore?: readonly string[];\n}\n\ntype ObjCSuperclass = 'NSObject' | 'UIView' | 'UIViewController';\ntype SwiftSuperclass = ObjCSuperclass;\n\n// ---------------------------------------------------------------------------\n// Name generation.\n// ---------------------------------------------------------------------------\n\n/** Generate a garbage ObjC class name from an existing name. */\nexport function objcGetMissObjName(oldObjName: string, seed: string, salt = 'objc-name'): string {\n const base = oldObjName.includes('+') ? oldObjName.split('+').at(-1)! : oldObjName;\n const words = base.replace(/[A-Z]/g, match => `_${match}`).split('_');\n let kept = words.filter(item => item.length > 2);\n if (kept.length > 2) kept = kept.slice(-2);\n if (kept.length <= 2) kept.unshift(randomWordTitle(seed, `${salt}:pre`));\n kept.unshift(randomWordTitle(seed, `${salt}:head`));\n return kept.join('');\n}\n\n/** Generate a garbage Swift class name from an existing name. */\nexport function swiftGetMissObjName(oldObjName: string, seed: string, salt = 'swift-name'): string {\n const title = randomWordTitle(seed, `${salt}:a`) + randomWordTitle(seed, `${salt}:b`);\n if (title.includes(DEFAULT_RUB_PREFIX)) return title;\n const lower = oldObjName.toLowerCase();\n if (oldObjName.endsWith('View') || oldObjName.endsWith('view')) return `${title}View`;\n if (lower.endsWith('controller') || lower.endsWith('control') || lower.endsWith('controll')) return `${title}Controller`;\n if (oldObjName.endsWith('Cell') || oldObjName.endsWith('cell')) return `${title}Cell`;\n if (oldObjName.endsWith('Model') || oldObjName.endsWith('model')) return `${title}Model`;\n if (lower.includes('tool')) return `${title}Tools`;\n if (oldObjName.endsWith('Label') || oldObjName.endsWith('label')) return `${title}Label`;\n if (lower.endsWith('button') || lower.endsWith('btn')) return `${title}Button`;\n if (oldObjName.endsWith('Manager') || oldObjName.endsWith('manager')) return `${title}Manager`;\n if (oldObjName.endsWith('Handler') || oldObjName.endsWith('handler')) return `${title}Handler`;\n if (oldObjName.endsWith('Operation') || oldObjName.endsWith('operation')) return `${title}Operation`;\n if (oldObjName.startsWith('UI') || oldObjName.startsWith('CG') || oldObjName.startsWith('NS')) {\n return `${randomWordTitle(seed, `${salt}:c`)}${oldObjName.slice(2)}`;\n }\n return `${title}Obj`;\n}\n\n\n// ---------------------------------------------------------------------------\n// ObjC template pool.\n// ---------------------------------------------------------------------------\n\nfunction objcColor(rng: Rng): string {\n return `[UIColor colorWithRed:${rng.int(0, 255)}/255.0 green:${rng.int(0, 255)}/255.0 blue:${rng.int(0, 255)}/255.0 alpha:1.0]`;\n}\n\nfunction objcMethodName(rng: Rng, returnValue: string, rubPrefix: string): string {\n let suffix: string;\n if (returnValue === 'void') suffix = 'Fun';\n else if (returnValue.startsWith('CG')) suffix = returnValue.slice(2);\n else suffix = '';\n const name = rng.int(0, 1) === 0\n ? rng.word() + capitalize(rng.word()) + suffix\n : rng.word() + capitalize(rng.word()) + capitalize(rng.word()) + suffix;\n const prefixed = rubPrefix.length > 0 ? rubPrefix + name : name;\n const stars = OBJC_NO_STARS.includes(returnValue) ? '' : ' *';\n return `- (${returnValue}${stars})${prefixed}`;\n}\n\nfunction objcParameterTuple(rng: Rng, state: ObjCGenState): { paramString: string; paramMap: Map<string, string> } {\n const parameterList: string[] = [];\n const parameterMap = new Map<string, string>();\n const count = rng.int(1, 3);\n for (let index = 0; index < count; index += 1) {\n let type = OBJC_FUN_HEAD_LIST[rng.int(1, OBJC_FUN_HEAD_LIST.length - 1)]!;\n if (parameterMap.has(type)) type = OBJC_FUN_HEAD_LIST[rng.int(1, OBJC_FUN_HEAD_LIST.length - 1)]!;\n\n let name: string;\n if (parameterMap.has(type) || state.rubProMap.has(type)) {\n name = state.rubProMap.get(type) ?? parameterMap.get(type)!;\n } else if (type === 'void') {\n name = rng.word() + capitalize(rng.word());\n } else if (type.startsWith('CG')) {\n name = rng.word() + type.slice(2);\n } else {\n name = rng.word() + capitalize(rng.word());\n }\n\n const stars = OBJC_NO_STARS.includes(type) ? '' : ' *';\n const parameter = index === 0 ? `:(${type}${stars})${name}` : `${name}:(${type}${stars})${name}`;\n parameterList.push(parameter);\n if (!state.rubProMap.has(type)) state.rubProMap.set(type, name);\n parameterMap.set(type, name);\n }\n return { paramString: parameterList.join(' '), paramMap: parameterMap };\n}\n\nconst OBJC_BORDER_STYLES: readonly string[] = [\n 'UITextBorderStyleNone', 'UITextBorderStyleLine', 'UITextBorderStyleBezel', 'UITextBorderStyleRoundedRect',\n];\nconst OBJC_CONTENT_MODES: readonly string[] = [\n 'UIViewContentModeScaleToFill', 'UIViewContentModeScaleAspectFit', 'UIViewContentModeScaleAspectFill',\n 'UIViewContentModeRedraw', 'UIViewContentModeCenter', 'UIViewContentModeTop', 'UIViewContentModeBottom',\n 'UIViewContentModeLeft', 'UIViewContentModeRight', 'UIViewContentModeTopLeft', 'UIViewContentModeTopRight',\n 'UIViewContentModeBottomLeft', 'UIViewContentModeBottomRight',\n];\nconst OBJC_H_ALIGNMENTS: readonly string[] = [\n 'UIControlContentHorizontalAlignmentCenter', 'UIControlContentHorizontalAlignmentLeft',\n 'UIControlContentHorizontalAlignmentRight', 'UIControlContentHorizontalAlignmentFill',\n 'UIControlContentHorizontalAlignmentLeading', 'UIControlContentHorizontalAlignmentTrailing',\n];\nconst OBJC_V_ALIGNMENTS: readonly string[] = [\n 'UIControlContentVerticalAlignmentCenter', 'UIControlContentVerticalAlignmentTop',\n 'UIControlContentVerticalAlignmentBottom', 'UIControlContentVerticalAlignmentFill',\n];\n\nfunction objcUISegmentedControlCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置sc的位置大小\\n${b}${praName}.frame = CGRectMake(${rng.int(0, 1000)}, ${rng.int(0, 1000)}, ${rng.int(0, 1000)}, ${rng.int(0, 1000)});\\n`,\n `${b}//设置颜色\\n${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n `${b}//设置sc当前停留的段\\n${b}${praName}.selectedSegmentIndex = 1;\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUIButtonCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}[${praName} setTitle:@\"${rng.word()}${capitalize(rng.word())}\" forState:UIControlStateNormal];\\n`,\n `${b}[${praName} setTitleColor:${objcColor(rng)} forState:UIControlStateNormal];\\n`,\n `${b}${praName}.titleLabel.font = [UIFont systemFontOfSize:${rng.int(10, 20)}];\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUISwitchCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置初始状态(默认状态为NO)\\n${b}${praName}.on = YES;\\n`,\n `${b}//设置按钮处于关闭状态时边框的颜色\\n${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n `${b}//设置开关处于开启时的状态\\n${b}${praName}.onTintColor = ${objcColor(rng)};\\n`,\n `${b}//设置开关的状态钮颜色\\n${b}${praName}.thumbTintColor = ${objcColor(rng)};\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUIControlCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置字体颜色\\n${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUIImageViewCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//边框\\n${b}${praName}.layer.borderWidth = 1;\\n`,\n `${b}${praName}.layer.borderColor = ${objcColor(rng)}.CGColor;\\n`,\n `${b}//裁剪\\n${b}${praName}.clipsToBounds = YES;\\n`,\n `${b}//缩放图片填充满UIImageView\\n${b}${praName}.contentMode = UIViewContentModeScaleToFill;\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUITextFieldCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置占位文本\\n${b}${praName}.placeholder = @\"请输入文字\";\\n`,\n `${b}//设置文本\\n${b}${praName}.text = @\"${rng.word()}${capitalize(rng.word())}\";\\n`,\n `${b}//设置文本的颜色\\n${b}${praName}.textColor = ${objcColor(rng)};\\n`,\n `${b}//设置文本的字体\\n${b}${praName}.font = [UIFont systemFontOfSize: ${rng.int(10, 25)} ];\\n`,\n `${b}//设置文本的对齐方式\\n${b}${praName}.textAlignment = NSTextAlignmentRight;\\n`,\n `${b}//设置边框样式(更多边框样式到补充说明中查看)默认的样式为UITextBorderStyleNone\\n${b}${praName}.borderStyle = ${rng.pick(OBJC_BORDER_STYLES)};\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUIDatePickerCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置地区: zh-中国\\n${b}${praName}.locale = [NSLocale localeWithLocaleIdentifier:@\"zh\"];\\n`,\n `${b}//设置日期模式(Displays month, day, and year depending on the locale setting)\\n${b}${praName}.datePickerMode = UIDatePickerModeCountDownTimer;\\n`,\n `${b}// 设置当前显示时间\\n${b}[${praName} setDate:[NSDate date] animated:YES];\\n`,\n `${b}// 设置显示最大时间(此处为当前时间)\\n${b}[${praName} setMaximumDate:[NSDate date]];\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUIPageControlCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.tintColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置小白点的个数\\n${b}${praName}.numberOfPages = ${rng.int(0, 10)};\\n`,\n `${b}//设置当前选中的点\\n${b}${praName}.currentPage = 0;\\n`,\n `${b}//设置当前选中的小白点的颜色\\n${b}${praName}.currentPageIndicatorTintColor = ${objcColor(rng)};\\n`,\n `${b}//设置未选中小白点的颜色\\n${b}${praName}.pageIndicatorTintColor = ${objcColor(rng)};\\n`,\n `${b}//用于控制是否只有一个页面时隐藏页面控件(默认值为NO)\\n${b}${praName}.hidesForSinglePage = YES;\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUICollectionViewFlowLayoutCode(rng: Rng, layout: string): string {\n const b = ' ';\n const code = [\n `${b}//设置item的行间距和列间距\\n${b}${layout}.minimumInteritemSpacing = ${rng.int(5, 20)};\\n`,\n `${b}${layout}.minimumLineSpacing = ${rng.int(5, 20)};\\n`,\n `${b}//设置每个分区的 上左下右 的内边距\\n${b}${layout}.sectionInset = UIEdgeInsetsMake(${rng.int(0, 10)}, ${rng.int(0, 10)} ,${rng.int(0, 10)}, ${rng.int(0, 10)});\\n`,\n `${b}//设置区头和区尾的大小\\n${b}${layout}.headerReferenceSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, ${rng.int(50, 100)});\\n`,\n `${b}${layout}.footerReferenceSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, ${rng.int(50, 100)});\\n`,\n `${b}//设置分区的头视图和尾视图 是否始终固定在屏幕上边和下边\\n${b}${layout}.sectionFootersPinToVisibleBounds = YES;\\n`,\n `${b}//设置滚动条方向\\n${b}${layout}.scrollDirection = UICollectionViewScrollDirectionVertical;\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUICollectionViewCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}${praName}.showsVerticalScrollIndicator = NO; //是否显示滚动条\\n`,\n `${b}${praName}.scrollEnabled = YES; //滚动使能\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUILabelCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}//设置label的文字\\n${b}${praName}.text = @\"${rng.word()}${capitalize(rng.word())}\";\\n`,\n `${b}//设置label的字体\\n${b}${praName}.font = [UIFont systemFontOfSize:${rng.int(10, 25)}];\\n`,\n `${b}//设置label的颜色\\n${b}${praName}.textColor = ${objcColor(rng)};\\n`,\n `${b}//设置label的阴影颜色和偏移\\n${b}${praName}.shadowColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.shadowOffset = CGSizeMake(${rng.int(10, 25)}, ${rng.int(10, 25)});\\n`,\n `${b}//设置文字对齐方式\\n${b}${praName}.textAlignment = NSTextAlignmentLeft;//文字居中\\n`,\n `${b}//设置文案的换行模式\\n${b}${praName}.lineBreakMode = NSLineBreakByTruncatingTail;//截取末尾\\n`,\n `${b}//设置高亮状态相关\\n${b}${praName}.highlightedTextColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.highlighted = YES;\\n`,\n `${b}//表示显示任意行\\n${b}${praName}.numberOfLines = 0;\\n`,\n `${b}//设置label是否自适应字体大小\\n${b}${praName}.adjustsFontSizeToFitWidth = YES;\\n`,\n `${b}//设置最小缩放字体(当adjustsFontSizeToFitWidth= YES,指定了最小缩放字体)\\n${b}${praName}.minimumScaleFactor = 20;\\n`,\n `${b}//label截断是否紧缩文字\\n${b}${praName}.allowsDefaultTighteningForTruncation = YES;\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcUISliderCode(rng: Rng, praName: string): string {\n const b = ' ';\n const code = [\n `${b}${praName}.backgroundColor = ${objcColor(rng)};\\n`,\n `${b}${praName}.alpha = 0.1;\\n`,\n `${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n`,\n `${b}${praName}.contentHorizontalAlignment = ${rng.pick(OBJC_H_ALIGNMENTS)};\\n`,\n `${b}${praName}.contentVerticalAlignment = ${rng.pick(OBJC_V_ALIGNMENTS)};\\n`,\n `${b}${praName}.tag = ${rng.int(0, 1000)};\\n`,\n `${b}// minimumValue : 当值可以改变时,滑块可以滑动到最小位置的值,默认为0.0\\n${b}${praName}.minimumValue = 0.0;\\n`,\n `${b}//当值可以改变时,滑块可以滑动到最大位置的值,默认为1.0\\n${b}${praName}.maximumValue = 100.0;\\n`,\n `${b}//当前值,这个值是介于滑块的最大值和最小值之间的,如果没有设置边界值,默认为0-1;\\n${b}${praName}.value = 50;\\n`,\n `${b}//小于滑块当前值滑块条的颜色\\n${b}${praName}.minimumTrackTintColor = ${objcColor(rng)};\\n`,\n `${b}//大于滑块当前值滑块条的颜色\\n${b}${praName}.maximumTrackTintColor = ${objcColor(rng)};\\n`,\n `${b}//当前滑块的颜色,默认为白色\\n${b}${praName}.thumbTintColor = ${objcColor(rng)};\\n`,\n `${b}// 小于滑块当前值滑块条的颜色\\n${b}${praName}.minimumTrackTintColor = ${objcColor(rng)};\\n`,\n `${b}//大于滑块当前值滑块条的颜色\\n${b}${praName}.maximumTrackTintColor = ${objcColor(rng)};\\n`,\n ];\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction objcCodeByObject(rng: Rng, praObjName: string, praName: string): string {\n const blank = ' ';\n const b = blank + blank;\n let code = '';\n if (praObjName === 'UIView') {\n code += `${blank}if(${praName} != nil){\\n${b}${praName}.backgroundColor = ${objcColor(rng)};\\n${b}${praName}.alpha = 0.1;\\n${b}${praName}.contentMode = ${rng.pick(OBJC_CONTENT_MODES)};\\n${b}${praName}.tag = ${rng.int(0, 1000)};\\n${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIButton') {\n code += `${blank}if(${praName} != nil){\\n${objcUIButtonCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIDatePicker') {\n code += `${blank}if(${praName} != nil){\\n${objcUIDatePickerCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIPageControl') {\n code += `${blank}if(${praName} != nil){\\n${objcUIPageControlCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UISegmentedControl') {\n code += `${blank}if(${praName} != nil){\\n${objcUISegmentedControlCode(rng, praName)}${blank}}else{\\n${b}//创建一个数组\\n${b}NSArray *${rng.word()}Array = @[@\"${rng.word()}\",@\"${rng.word()}\",@\"${rng.word()}\",@\"${rng.word()}\"];\\n${b}${praName} = [[${praObjName} alloc] initWithItems:${rng.word()}Array];\\n${blank}}\\n`;\n } else if (praObjName === 'UITextField') {\n code += `${blank}if(${praName} != nil){\\n${objcUITextFieldCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UISwitch') {\n code += `${blank}if(${praName} != nil){\\n${objcUISwitchCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UISlider') {\n code += `${blank}if(${praName} != nil){\\n${objcUISliderCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIControl') {\n code += `${blank}if(${praName} != nil){\\n${objcUIControlCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIImageView') {\n code += `${blank}if(${praName} != nil){\\n${objcUIImageViewCode(rng, praName)}${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UIViewController') {\n code += `${blank}if(${praName} != nil){\\n${b}${praName}.view.backgroundColor = ${objcColor(rng)};\\n${blank}}else{\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n`;\n } else if (praObjName === 'UICollectionView') {\n const layout = `${rng.word()}Layout`;\n code += `${blank}if(${praName} != nil){\\n${objcUICollectionViewCode(rng, praName)}${blank}}else{\\n${b}UICollectionViewFlowLayout *${layout} = [[UICollectionViewFlowLayout alloc] init];\\n${objcUICollectionViewFlowLayoutCode(rng, layout)}${b}//${praName} 初始化\\n${b}${praName} = [[${praObjName} alloc] initWithFrame:CGRectZero collectionViewLayout:${layout}];\\n${blank}}\\n`;\n } else if (praObjName === 'UILabel') {\n code += `${blank}if(${praName} == nil){\\n${b}${praName} = [[${praObjName} alloc] init];\\n${blank}}\\n${objcUILabelCode(rng, praName)}`;\n } else if (praObjName === 'UIColor') {\n code += `${blank}${praName} = [UIColor colorWithRed:${rng.int(0, 255)}/255 green:${rng.int(0, 255)}/255 blue:${rng.int(0, 255)}/255 alpha:1];\\n`;\n } else if (praObjName === 'UIFont') {\n code += `${blank}if(${praName} != nil){\\n${b}${praName} = [UIFont systemFontOfSize:${rng.int(10, 25)}];\\n${blank}}else{\\n${b}//pass\\n${blank}}\\n`;\n } else if (praObjName === 'Void') {\n // no-op\n } else if (praObjName === 'CGFloat') {\n code += `${blank}${praName} = ${rng.int(0, 2000)}.00;\\n`;\n } else if (praObjName === 'CGRect') {\n code += `${blank}${praName} = CGRectMake(${rng.int(0, 200)}, ${rng.int(0, 200)}, ${rng.int(0, 200)}, ${rng.int(0, 200)});\\n`;\n } else if (praObjName === 'NSInteger') {\n code += `${blank}${praName} = ${rng.int(0, 200)};\\n`;\n } else if (praObjName === 'NSString') {\n code += `${blank}${praName} = @\"${rng.word()}${capitalize(rng.word())}\";\\n`;\n } else if (praObjName === 'NSArray') {\n code += `${blank}${praName} = @[@\"${rng.word()}\", @\"${rng.word()}\", @\"${rng.word()}\", @\"${rng.word()}\"];\\n`;\n } else if (praObjName === 'NSDictionary') {\n code += `${blank}${praName} = @{@\"${rng.word()}\":@\"${rng.word()}\", @\"${rng.word()}\":@\"${rng.word()}\", @\"${rng.word()}\":@\"${rng.word()}\"};\\n`;\n } else if (praObjName === 'NSNumber') {\n code += `${blank}${praName} = [NSNumber numberWithInt:${rng.int(0, 200)}];\\n`;\n } else if (praObjName === 'NSURL') {\n code += `${blank}${praName} = [NSURL URLWithString:@\"https://www.${rng.word()}.com/${rng.word()}/${rng.word()}\"];\\n`;\n } else if (praObjName === 'NSIndexPath') {\n code += `${blank}${praName} = [NSIndexPath indexPathWithIndex:${rng.int(0, 200)}];\\n`;\n }\n code += '\\n';\n return code;\n}\n\nfunction objcDetailImport(rng: Rng, state: ObjCGenState, className: string, classFunList: readonly string[], thisParamMap: ReadonlyMap<string, string>): string {\n const blank = ' ';\n const classFun = classFunList[rng.int(0, classFunList.length - 1)]!;\n const classPraName = rng.word() + capitalize(rng.word());\n let code = `${blank}${className} *${classPraName} = [[${className} alloc] init];\\n`;\n let importCode = '';\n const parts = classFun.split(':');\n for (let index = 0; index < parts.length; index += 1) {\n let item = parts[index]!;\n if (item.includes(';')) item = item.replace(/;/g, '');\n if (item.includes('*')) item = item.replace(/\\*/g, '');\n if (index === 0) {\n importCode += item.slice(item.indexOf(')') + 1).trim();\n continue;\n }\n const open = item.indexOf('(');\n const close = item.indexOf(')');\n const praObjName = item.slice(open + 1, close).trim();\n let praName = item.slice(close + 1).trim();\n if (praName.includes(' ')) praName = praName.split(' ')[0]!;\n if (thisParamMap.has(praObjName)) {\n importCode += index === 1 ? `:${thisParamMap.get(praObjName)}` : `${praName}:${thisParamMap.get(praObjName)}`;\n } else if (!OBJC_NO_STARS.includes(praObjName)) {\n code += `${blank}${praObjName} *${praName};\\n`;\n } else {\n code += `${blank}${praObjName} ${praName};\\n`;\n }\n code += objcCodeByObject(rng, praObjName, praName);\n importCode += index === 1 ? `:${praName}` : `${praName}:${praName}`;\n if (index !== parts.length - 1) importCode += ' ';\n }\n code += `${blank}[${classPraName} ${importCode}];\\n`;\n if (!state.headerFiles.includes(className)) state.headerFiles.push(className);\n return code;\n}\n\nfunction objcImportCode(rng: Rng, state: ObjCGenState, thisParamMap: ReadonlyMap<string, string>): string {\n let code = '';\n if (state.registry.unused.size > 0) {\n const keys = [...state.registry.unused.keys()];\n const className = keys[rng.int(0, keys.length - 1)]!;\n const funList = state.registry.unused.get(className)!;\n code += objcDetailImport(rng, state, className, funList, thisParamMap);\n state.registry.unused.delete(className);\n state.registry.used.set(className, funList);\n } else if (state.registry.used.size > 0) {\n const keys = [...state.registry.used.keys()];\n const className = keys[rng.int(0, keys.length - 1)]!;\n code += objcDetailImport(rng, state, className, state.registry.used.get(className)!, thisParamMap);\n }\n code += '\\n';\n return code;\n}\n\nfunction createObjCMethod(rng: Rng, rubPrefix: string, state: ObjCGenState): { methodCode: string; hDeclaration: string } {\n const blank = ' ';\n const returnValue = rng.pick(OBJC_FUN_HEAD_LIST);\n let returnCode: string | undefined;\n const funName = objcMethodName(rng, returnValue, rubPrefix);\n const { paramString, paramMap } = objcParameterTuple(rng, state);\n const hDeclaration = `${funName}${paramString};`;\n let methodCode = `${funName}${paramString}{\\n`;\n const thisParamMap = new Map<string, string>();\n for (const [praObjName, praName] of paramMap) {\n if (praObjName === returnValue) returnCode = praName;\n methodCode += objcCodeByObject(rng, praObjName, praName);\n thisParamMap.set(praObjName, praName);\n }\n methodCode += objcImportCode(rng, state, thisParamMap);\n if (returnValue !== 'void') {\n if (returnCode !== undefined) {\n methodCode += `${blank}return ${returnCode};\\n`;\n } else {\n const praName = rng.word() + capitalize(rng.word());\n if (!OBJC_NO_STARS.includes(returnValue)) methodCode += `${blank}${returnValue} *${praName};\\n`;\n else methodCode += `${blank}${returnValue} ${praName};\\n`;\n methodCode += objcCodeByObject(rng, returnValue, praName);\n methodCode += `${blank}return ${praName};\\n`;\n }\n }\n methodCode += '}\\n\\n';\n return { methodCode, hDeclaration };\n}\n\nfunction generateObjCJunkInternal(amount: number, rubPrefix: string, seed: string, salt: string, state: ObjCGenState): ObjCJunk {\n const rng = new Rng(seed, salt);\n let hCode = '';\n let mCode = '';\n const hFunList: string[] = [];\n for (let i = 0; i < amount; i += 1) {\n const { methodCode, hDeclaration } = createObjCMethod(rng, rubPrefix, state);\n mCode += methodCode;\n hCode += `${hDeclaration}\\n\\n`;\n hFunList.push(hDeclaration);\n }\n for (const [praObjName, praName] of state.rubProMap) {\n let keyword = 'strong';\n let stars = '*';\n if (OBJC_ASSIGN.includes(praObjName)) { keyword = 'assign'; stars = ''; }\n else if (OBJC_COPY.includes(praObjName)) keyword = ' copy';\n hCode += `@property (nonatomic,${keyword}) ${praObjName} ${stars}${praName};\\n\\n`;\n }\n let headerImportCode = '';\n for (const className of state.headerFiles) headerImportCode += `#import \"${className}.h\"\\n`;\n return { hCode, mCode, headerImportCode, hFunList };\n}\n\n/** Generate a garbage ObjC method body. */\nexport function generateObjCJunk(amount: number, rubPrefix: string, seed: string, salt: string): ObjCJunk {\n const state: ObjCGenState = { rubProMap: new Map(), headerFiles: [], registry: newRegistry() };\n return generateObjCJunkInternal(amount, rubPrefix, seed, salt, state);\n}\n\n/** Generate one deterministic ObjC garbage method (declaration + body). */\nexport function generateObjCMethod(rubPrefix: string, seed: string, salt: string): { methodCode: string; hDeclaration: string } {\n const state: ObjCGenState = { rubProMap: new Map(), headerFiles: [], registry: newRegistry() };\n const rng = new Rng(seed, salt);\n return createObjCMethod(rng, rubPrefix, state);\n}\n\n// ---------------------------------------------------------------------------\n// Swift template pool.\n// ---------------------------------------------------------------------------\n\nfunction swiftColor(rng: Rng): string {\n return `UIColor.init(red: CGFloat(${rng.int(0, 255)}/255), green: CGFloat(${rng.int(0, 255)}/255), blue: CGFloat(${rng.int(0, 255)}/255), alpha: 1)`;\n}\n\nconst SWIFT_CONTENT_MODES: readonly string[] = [\n 'scaleToFill', 'scaleAspectFit', 'scaleAspectFill', 'redraw', 'center', 'top', 'bottom',\n 'left', 'right', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight',\n];\n\nfunction swiftUIViewList(rng: Rng, praName: string, selfCode: string): string[] {\n const b = ' ';\n return [\n `${b}//设置坐标\\n${b}${selfCode}${praName}.frame = CGRect(x:${rng.int(0, 99)}, y:${rng.int(0, 99)}, width:${rng.int(0, 99)}, height:${rng.int(0, 99)})\\n`,\n `${b}//设置背景颜色\\n${b}${selfCode}${praName}.backgroundColor = ${swiftColor(rng)}\\n`,\n `${b}//将图片作为背景颜色\\n${b}${selfCode}${praName}.backgroundColor = UIColor.init(patternImage: UIImage(named: \"${rng.word()}Image.png\")!)\\n`,\n `${b}//不透明度alpha\\n${b}${selfCode}${praName}.alpha = 0.${rng.int(0, 99)}\\n`,\n `${b}//隐藏属性hidden\\n${b}${selfCode}${praName}.isHidden = true\\n`,\n `${b}//切边属性clipsToBounds\\n${b}${selfCode}${praName}.clipsToBounds = true\\n`,\n `${b}//是否响应用户的交互\\n${b}${selfCode}${praName}.isUserInteractionEnabled = true\\n`,\n `${b}//contentMode\\n${b}${selfCode}${praName}.contentMode = UIView.ContentMode.${rng.pick(SWIFT_CONTENT_MODES)}\\n`,\n `${b}//设置圆角\\n${b}${selfCode}${praName}.layer.masksToBounds = true\\n${b}${selfCode}${praName}.layer.cornerRadius = ${rng.int(5, 20)}\\n`,\n `${b}//设置边框\\n${b}${selfCode}${praName}.layer.borderColor = UIColor.purple.cgColor\\n${b}${selfCode}${praName}.layer.borderWidth = 1.0\\n`,\n `${b}//设置标志值\\n${b}${selfCode}${praName}.tag = ${rng.int(0, 255)}\\n`,\n `${b}//设置frame的center\\n${b}${selfCode}${praName}.center = CGPoint(x: ${rng.int(0, 255)}, y: ${rng.int(0, 255)})\\n`,\n ];\n}\n\nfunction swiftUILabelCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//字体\\n${b}${selfCode}${praName}.font = UIFont.systemFont(ofSize: ${rng.int(10, 30)})\\n`,\n `${b}//字体颜色\\n${b}${selfCode}${praName}.textColor = ${swiftColor(rng)}\\n`,\n `${b}//对齐方式\\n${b}${selfCode}${praName}.textAlignment = .left\\n`,\n `${b}//多行显示\\n${b}${selfCode}${praName}.numberOfLines = ${rng.int(0, 255)}\\n`,\n `${b}//阴影\\n${b}${selfCode}${praName}.shadowColor = ${swiftColor(rng)}\\n${b}${selfCode}${praName}.shadowOffset = CGSize.init(width:${rng.int(0, 10)}, height:${rng.int(0, 10)})\\n${b}${selfCode}${praName}.lineBreakMode = NSLineBreakMode.byTruncatingTail\\n`,\n `${b}//高亮\\n${b}${selfCode}${praName}.isHighlighted = true\\n${b}${selfCode}${praName}.highlightedTextColor = ${swiftColor(rng)}\\n`,\n `${b}//文字过长时省略方式\\n${b}${selfCode}${praName}.lineBreakMode = .byTruncatingTail\\n`,\n `${b}//当文字超出标签宽度时,自动调整文字大小,使其不被截断\\n${b}${selfCode}${praName}.adjustsFontSizeToFitWidth = true\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUICollectionViewCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(`${b}${selfCode}${praName}.showsVerticalScrollIndicator = false\\n`);\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIViewControllerCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n return rng.sample([`${b}//设置背景颜色\\n${b}${selfCode}${praName}.view.backgroundColor = ${swiftColor(rng)}\\n`], 1).join('');\n}\n\nfunction swiftUIImageViewCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(`${b}//设置显示的图片\\n${b}${selfCode}${praName}.image = UIImage(named: \"${rng.word()}Image.png\")\\n`);\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIControlCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(`${b}//设置关闭状态的颜色\\n${b}${selfCode}${praName}.tintColor = ${swiftColor(rng)}\\n`);\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUISliderCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//最小值\\n${b}${selfCode}${praName}.minimumValue = 0\\n`,\n `${b}//最大值\\n${b}${selfCode}${praName}.maximumValue = 1\\n`,\n `${b}//当前值\\n${b}${selfCode}${praName}.value = 0.5\\n`,\n `${b}//左边槽的颜色\\n${b}${selfCode}${praName}.minimumTrackTintColor = ${swiftColor(rng)}\\n`,\n `${b}//右边槽的颜色\\n${b}${selfCode}${praName}.maximumTrackTintColor = ${swiftColor(rng)}\\n`,\n `${b}//左边图标\\n${b}${selfCode}${praName}.minimumValueImage = UIImage(named:\"${rng.word()}Image.png\")\\n`,\n `${b}//右边图标\\n${b}${selfCode}${praName}.maximumValueImage = UIImage(named:\"${rng.word()}Image.png\")\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUISwitchCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//设置开启状态显示的颜色\\n${b}${selfCode}${praName}.onTintColor = ${swiftColor(rng)}\\n`,\n `${b}//设置关闭状态的颜色\\n${b}${selfCode}${praName}.tintColor = ${swiftColor(rng)}\\n`,\n `${b}//滑块上小圆点的颜色\\n${b}${selfCode}${praName}.thumbTintColor = ${swiftColor(rng)}\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUITextFieldCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//设置边框样式为圆角矩形\\n${b}${selfCode}${praName}.borderStyle = UITextField.BorderStyle.roundedRect\\n`,\n `${b}//字体颜色\\n${b}${selfCode}${praName}.textColor = ${swiftColor(rng)}\\n`,\n `${b}//字体\\n${b}${selfCode}${praName}.font = UIFont.systemFont(ofSize: ${rng.int(10, 30)})\\n`,\n `${b}${selfCode}${praName}.textAlignment = NSTextAlignment.left\\n`,\n `${b}//文本框提示文字\\n${b}${selfCode}${praName}.placeholder = \"请输入文字\"\\n`,\n `${b}//明文显示\\n${b}${selfCode}${praName}.isSecureTextEntry = false\\n`,\n `${b}//光标颜色\\n${b}${selfCode}${praName}.tintColor = ${swiftColor(rng)}\\n`,\n `${b}//当文字超出文本框宽度时,自动调整文字大小\\n${b}${selfCode}${praName}.adjustsFontSizeToFitWidth = true\\n`,\n `${b}//最小可缩小的字号\\n${b}${selfCode}${praName}.minimumFontSize = ${rng.int(10, 20)}\\n`,\n `${b}//清除按钮(输入框内右侧小叉)\\n${b}${selfCode}${praName}.clearButtonMode = .whileEditing\\n`,\n `${b}//设置文本框关联的键盘类型\\n${b}${selfCode}${praName}.keyboardType = .default\\n`,\n `${b}//设置键盘return键的样式\\n${b}${selfCode}${praName}.returnKeyType = .send\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUISegmentedControlCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//默认第0个选中\\n${b}${selfCode}${praName}.selectedSegmentIndex = 0\\n`,\n `${b}//点击之后是否属于选中状态(true:否)\\n${b}${selfCode}${praName}.isMomentary = true\\n`,\n );\n const sizeName = rng.word();\n code.push(`${b}//修改item内容的偏移量\\n${b}let ${sizeName} = CGSize(width: -${rng.int(0, 20)}, height: -${rng.int(0, 20)})\\n${b}${selfCode}${praName}.setContentOffset(${sizeName}, forSegmentAt: 0)\\n`);\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIPageControlCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//设置总页数\\n${b}${selfCode}${praName}.numberOfPages = ${rng.int(0, 30)}\\n`,\n `${b}//设置未选中颜色\\n${b}${selfCode}${praName}.pageIndicatorTintColor = ${swiftColor(rng)}\\n`,\n `${b}//当前多少页\\n${b}${selfCode}${praName}.currentPage = 0\\n`,\n `${b}//选中滑块的颜色\\n${b}${selfCode}${praName}.currentPageIndicatorTintColor = ${swiftColor(rng)}\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIDatePickerCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//设置datePickerMode\\n${b}${selfCode}${praName}.datePickerMode = UIDatePicker.Mode.date\\n`,\n `${b}//获取当前本地化\\n${b}${selfCode}${praName}.locale = Locale.init(identifier: \"zh_CN\")\\n`,\n `${b}//设置日历属性\\n${b}${selfCode}${praName}.calendar = Calendar.current\\n`,\n `${b}//时区的设置\\n${b}${selfCode}${praName}.timeZone = TimeZone.current\\n`,\n `${b}//日期属性\\n${b}${selfCode}${praName}.date = Date.init(timeIntervalSinceNow: ${rng.int(0, 255)})\\n`,\n `${b}//设置一个时间区段\\n${b}${selfCode}${praName}.date = Date.init(timeIntervalSinceNow: ${rng.int(0, 255)})\\n`,\n `${b}//时间间隔属性\\n${b}${selfCode}${praName}.minuteInterval = ${rng.int(0, 255)}\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIButtonCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n const code = swiftUIViewList(rng, praName, selfCode);\n code.push(\n `${b}//设置title\\n${b}${selfCode}${praName}.setTitle(\"${rng.wordTitle()}\", for: .normal)\\n`,\n `${b}//设置title颜色\\n${b}${selfCode}${praName}.setTitleColor(${swiftColor(rng)}, for: .normal)\\n`,\n `${b}//字体\\n${b}${selfCode}${praName}.titleLabel?.font = UIFont.systemFont(ofSize: ${rng.int(10, 30)})\\n`,\n );\n return rng.sample(code, PRO_COUNT).join('');\n}\n\nfunction swiftUIViewCode(rng: Rng, praName: string, selfCode: string): string {\n return rng.sample(swiftUIViewList(rng, praName, selfCode), PRO_COUNT).join('');\n}\n\nfunction swiftUIFontCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n return rng.sample([`${b}${selfCode}${praName} = UIFont.systemFont(ofSize: ${rng.int(10, 30)})\\n`], 1).join('');\n}\n\nfunction swiftUIColorCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n return rng.sample([`${b}${selfCode}${praName} = UIColor.init(red: CGFloat(${rng.int(0, 255)}/255), green: CGFloat(${rng.int(0, 255)}/255), blue: CGFloat(${rng.int(0, 255)}/255), alpha: 1)\\n`], 1).join('');\n}\n\nfunction swiftNSArrayCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n return `${b}${selfCode}${praName} = [\"${rng.word()}\", \"${rng.word()}\", \"${rng.word()}\"]\\n`;\n}\n\nfunction swiftNSDictionaryCode(rng: Rng, praName: string, selfCode: string): string {\n const b = ' ';\n return `${b}${selfCode}${praName} = [\"${rng.word()}\": \"${rng.word()}\", \"${rng.word()}\": \"${rng.word()}\"]\\n`;\n}\n\nfunction swiftCodeByObject(\n rng: Rng,\n state: SwiftGenState,\n praObjName: string,\n praName: string,\n spaceCount: number,\n isNeedInit = false,\n): string {\n const selfCode = state.rubProMap.has(praObjName) && state.rubProMap.get(praObjName) === praName ? 'self.' : '';\n const blank = ' '.repeat(spaceCount);\n const b = blank + blank;\n let code = '';\n const letStr = SWIFT_VAR_LIST.includes(praObjName) ? 'var' : 'let';\n if (isNeedInit) code += `${b}${letStr} ${praName} = ${praObjName}()\\n`;\n\n if (praObjName === 'UIView') code += swiftUIViewCode(rng, praName, selfCode);\n else if (praObjName === 'UIButton') code += swiftUIButtonCode(rng, praName, selfCode);\n else if (praObjName === 'UIDatePicker') code += swiftUIDatePickerCode(rng, praName, selfCode);\n else if (praObjName === 'UIPageControl') code += swiftUIPageControlCode(rng, praName, selfCode);\n else if (praObjName === 'UISegmentedControl') code += swiftUISegmentedControlCode(rng, praName, selfCode);\n else if (praObjName === 'UITextField') code += swiftUITextFieldCode(rng, praName, selfCode);\n else if (praObjName === 'UISwitch') code += swiftUISwitchCode(rng, praName, selfCode);\n else if (praObjName === 'UISlider') code += swiftUISliderCode(rng, praName, selfCode);\n else if (praObjName === 'UIControl') code += swiftUIControlCode(rng, praName, selfCode);\n else if (praObjName === 'UIImageView') code += swiftUIImageViewCode(rng, praName, selfCode);\n else if (praObjName === 'UIViewController') code += swiftUIViewControllerCode(rng, praName, selfCode);\n else if (praObjName === 'UICollectionView') code += swiftUICollectionViewCode(rng, praName, selfCode);\n else if (praObjName === 'UILabel') code += swiftUILabelCode(rng, praName, selfCode);\n else if (praObjName === 'UIColor') code += swiftUIColorCode(rng, praName, selfCode);\n else if (praObjName === 'UIFont') code += swiftUIFontCode(rng, praName, selfCode);\n else if (praObjName === 'Void') { /* no-op */ }\n else if (praObjName === 'CGFloat') code += `${b}${selfCode}${praName} = ${rng.int(0, 2000)}.00\\n`;\n else if (praObjName === 'CGRect') code += `${b}${selfCode}${praName} = CGRect(x: ${rng.int(10, 200)}, y: ${rng.int(10, 200)}, width: ${rng.int(10, 200)}, height: ${rng.int(10, 200)})\\n`;\n else if (praObjName === 'NSInteger') code += `${b}${selfCode}${praName} = ${rng.int(0, 2000)}\\n`;\n else if (praObjName === 'NSString' || praObjName === 'String') code += `${b}${selfCode}${praName} = \"${rng.word()}${capitalize(rng.word())}\"\\n`;\n else if (praObjName === 'NSArray' || praObjName === 'Array') code += swiftNSArrayCode(rng, praName, selfCode);\n else if (praObjName === 'NSDictionary') code += swiftNSDictionaryCode(rng, praName, selfCode);\n else if (praObjName === 'NSURL') code += `${b}${selfCode}${praName} = NSURL(string: \"https://www.${rng.word()}.com/${rng.word()}\")!\\n`;\n return code;\n}\n\nfunction swiftMethodName(rng: Rng, returnValue: string, parameterStr: string, rubPrefix: string): string {\n let suffix: string;\n if (returnValue === 'Void' || returnValue === 'void') suffix = 'Fun';\n else if (returnValue.startsWith('CG')) suffix = returnValue.slice(2);\n else suffix = '';\n const name = rng.int(0, 1) === 0\n ? rng.word() + capitalize(rng.word()) + suffix\n : rng.word() + capitalize(rng.word()) + capitalize(rng.word()) + suffix;\n const prefixed = rubPrefix.length > 0 ? rubPrefix + name : name;\n return `func ${prefixed}${parameterStr} -> ${returnValue}`;\n}\n\nfunction swiftParameterTuple(rng: Rng, state: SwiftGenState): { paramString: string; paramMap: Map<string, string> } {\n const parameterList: string[] = [];\n const parameterMap = new Map<string, string>();\n const count = rng.int(1, 3);\n for (let index = 0; index < count; index += 1) {\n let type = SWIFT_FUN_HEAD_LIST[rng.int(1, SWIFT_FUN_HEAD_LIST.length - 1)]!;\n if (parameterMap.has(type)) type = SWIFT_FUN_HEAD_LIST[rng.int(1, SWIFT_FUN_HEAD_LIST.length - 1)]!;\n\n let name: string;\n if (parameterMap.has(type) || state.rubProMap.has(type)) {\n name = state.rubProMap.get(type) ?? parameterMap.get(type)!;\n } else if (type === 'void' || type === 'Void') {\n name = rng.word() + capitalize(rng.word());\n } else if (type.startsWith('CG')) {\n name = rng.word() + type.slice(2);\n } else {\n name = rng.word() + capitalize(rng.word());\n }\n\n parameterList.push(index === 0 ? `_ ${name}: ${type}` : ` ${name}: ${type}`);\n if (!state.rubProMap.has(type)) state.rubProMap.set(type, name);\n parameterMap.set(type, name);\n }\n return { paramString: `(${parameterList.join(',')})`, paramMap: parameterMap };\n}\n\nfunction swiftDetailImport(rng: Rng, state: SwiftGenState, className: string, classFunList: readonly string[], thisParamMap: ReadonlyMap<string, string>): string {\n const blank = ' ';\n const classFun = classFunList[rng.int(0, classFunList.length - 1)]!;\n if (!classFun.startsWith('func ')) return `${blank}// 无效的引用\\n`;\n const classPraName = rng.wordTitle();\n let code = `${blank}let ${classPraName} = ${className}()\\n`;\n const openParen = classFun.indexOf('(');\n const closeParen = classFun.indexOf(')');\n const main = classFun.slice(classFun.indexOf('func ') + 5, openParen);\n let importCode = `.${main}(`;\n let paramStr = classFun.slice(openParen + 1, closeParen);\n if (paramStr.startsWith('_ ')) paramStr = paramStr.slice(2);\n const parts = paramStr.split(',');\n for (let index = 0; index < parts.length; index += 1) {\n const item = parts[index]!.replace(/\\s/g, '');\n const [praName, praObjName] = item.split(':') as [string, string];\n if (thisParamMap.has(praObjName)) {\n importCode += index === 0 ? `${thisParamMap.get(praObjName)},` : `${praName}: ${thisParamMap.get(praObjName)},`;\n continue;\n }\n code += swiftCodeByObject(rng, state, praObjName, praName, 4, true);\n importCode += index === 0 ? `${praName},` : `${praName}: ${praName},`;\n }\n if (importCode.endsWith(',')) importCode = importCode.slice(0, -1);\n importCode += ')';\n code += `${blank}${classPraName}${importCode}\\n`;\n return code;\n}\n\nfunction swiftImportCode(rng: Rng, state: SwiftGenState, thisParamMap: ReadonlyMap<string, string>): string {\n let code = '';\n if (state.registry.unused.size > 0) {\n const keys = [...state.registry.unused.keys()];\n const className = keys[rng.int(0, keys.length - 1)]!;\n const funList = state.registry.unused.get(className)!;\n code += swiftDetailImport(rng, state, className, funList, thisParamMap);\n state.registry.unused.delete(className);\n state.registry.used.set(className, funList);\n } else if (state.registry.used.size > 0) {\n const keys = [...state.registry.used.keys()];\n const className = keys[rng.int(0, keys.length - 1)]!;\n code += swiftDetailImport(rng, state, className, state.registry.used.get(className)!, thisParamMap);\n }\n code += '\\n';\n return code;\n}\n\nfunction createSwiftMethod(rng: Rng, rubPrefix: string, state: SwiftGenState): { methodCode: string; declaration: string } {\n const blank = ' ';\n const returnValue = rng.pick(SWIFT_FUN_HEAD_LIST);\n let returnCode: string | undefined;\n const { paramString, paramMap } = swiftParameterTuple(rng, state);\n const declaration = swiftMethodName(rng, returnValue, paramString, rubPrefix);\n let methodCode = `${blank}${declaration}{\\n`;\n const thisParamMap = new Map<string, string>();\n for (const [praObjName, praName] of paramMap) {\n if (praObjName === returnValue) returnCode = praName;\n methodCode += `${swiftCodeByObject(rng, state, praObjName, praName, 4)}\\n`;\n thisParamMap.set(praObjName, praName);\n }\n methodCode += swiftImportCode(rng, state, thisParamMap);\n if (returnValue === 'Void' || returnValue === 'void') {\n methodCode += `${blank}${blank}//\\n`;\n } else if (returnCode !== undefined) {\n methodCode += `${blank}${blank}return ${returnCode}\\n`;\n } else {\n const letStr = SWIFT_VAR_LIST.includes(returnValue) ? 'var' : 'let';\n const praName = rng.word() + capitalize(rng.word());\n methodCode += `${blank}${blank}${letStr} ${praName} = ${returnValue}()\\n`;\n methodCode += `${swiftCodeByObject(rng, state, returnValue, praName, 4)}\\n`;\n methodCode += `${blank}${blank}return ${praName}\\n`;\n }\n methodCode += `${blank}}\\n\\n`;\n return { methodCode, declaration };\n}\n\nfunction swiftLazyProperty(rng: Rng, praName: string, praObjName: string): string {\n const blank = ' ';\n if (praObjName === 'Bool') {\n const nowDateStr = `${rng.word()}Date`;\n const timeIntervalStr = `${rng.word()}Interval`;\n const timeStampStr = `timeStamp${rng.wordTitle()}`;\n return `${blank}var ${praName}: Bool {\\n`\n + `${blank}${blank}let ${nowDateStr} = NSDate()\\n`\n + `${blank}${blank}let ${timeIntervalStr}: TimeInterval = ${nowDateStr}.timeIntervalSince1970\\n`\n + `${blank}${blank}let ${timeStampStr} = Int(${timeIntervalStr})\\n`\n + `${blank}${blank}if (${timeStampStr}/2 == 0){\\n`\n + `${blank}${blank}${blank}return true\\n`\n + `${blank}${blank}}else{\\n`\n + `${blank}${blank}${blank}return false\\n`\n + `${blank}${blank}}\\n`\n + `${blank}}\\n`;\n }\n if (praObjName === 'CGFloat') return `${blank}var ${praName}: CGFloat! = 0.0\\n`;\n if (praObjName === 'CGRect') {\n return `${blank}var ${praName}: CGRect = CGRect(x: ${rng.int(30, 300)}, y: ${rng.int(30, 300)}, width: ${rng.int(30, 300)}, height: ${rng.int(30, 300)})\\n`;\n }\n if (praObjName === 'NSInteger') return `${blank}var ${praName}: NSInteger! = 0\\n`;\n if (praObjName === 'NSString') return `${blank}var ${praName}: NSString! = \"\"\\n`;\n if (praObjName === 'NSArray') return `${blank}var ${praName}: NSArray! = []\\n`;\n if (praObjName === 'NSDictionary') return `${blank}var ${praName}: NSDictionary = [String:String]() as NSDictionary\\n`;\n if (praObjName === 'NSNumber') return `${blank}var ${praName}: NSNumber = 0\\n`;\n if (praObjName === 'NSURL') {\n const address = `\"https://www.${rng.word()}${rng.word()}.com\"`;\n return `${blank}var ${praName}: NSURL = NSURL(string: ${address} as String)!\\n`;\n }\n return `${blank}var ${praName}: ${praObjName} = ${praObjName}()\\n`;\n}\n\nfunction generateSwiftJunkInternal(amount: number, rubPrefix: string, seed: string, salt: string, state: SwiftGenState): SwiftJunk {\n const rng = new Rng(seed, salt);\n let methodCode = '';\n const funList: string[] = [];\n for (let i = 0; i < amount; i += 1) {\n const { methodCode: body, declaration } = createSwiftMethod(rng, rubPrefix, state);\n methodCode += body;\n funList.push(declaration);\n }\n let propertyCode = '';\n for (const [praObjName, praName] of state.rubProMap) propertyCode += swiftLazyProperty(rng, praName, praObjName);\n return { propertyCode, methodCode, funList };\n}\n\n/** Generate a garbage Swift method body. */\nexport function generateSwiftJunk(amount: number, rubPrefix: string, seed: string, salt: string): SwiftJunk {\n const state: SwiftGenState = { rubProMap: new Map(), registry: newRegistry() };\n return generateSwiftJunkInternal(amount, rubPrefix, seed, salt, state);\n}\n\n/** Generate one deterministic Swift garbage method. */\nexport function generateSwiftMethod(rubPrefix: string, seed: string, salt: string): { methodCode: string; declaration: string } {\n const state: SwiftGenState = { rubProMap: new Map(), registry: newRegistry() };\n const rng = new Rng(seed, salt);\n return createSwiftMethod(rng, rubPrefix, state);\n}\n\n// ---------------------------------------------------------------------------\n// File head template.\n// ---------------------------------------------------------------------------\n\n/** Deterministic port of getHeadCode (Xcode source-file header comment). */\nexport function generateFileHead(fileName: string, seed: string, salt: string): string {\n const rng = new Rng(seed, `${salt}:head`);\n const line1 = rng.wordUpper();\n const line2 = rng.wordUpper();\n const line3 = rng.wordUpper();\n const date = dateString(rng);\n return `//\\n// ${fileName}\\n// ${line1}\\n//\\n// Created by ${line2} on ${date}.\\n// Copyright © 2019 ${line3}. All rights reserved.\\n//\\n\\n\\n`;\n}\n\nconst OBJC_IMPORT_LIST: readonly string[] = [\n '#import <Foundation/Foundation.h>\\n#import <UIKit/UIKit.h>',\n '#import <UIKit/UIKit.h>',\n '#import <UIKit/UIKit.h>',\n];\n\n/** Build one OC `.h`/`.m` file pair from an ObjCJunk tuple. */\nexport function generateObjCFile(objectName: string, objClass: ObjCSuperclass, junk: ObjCJunk, seed: string, salt: string): { h: string; m: string } {\n const h = generateFileHead(`${objectName}.h`, seed, salt)\n + `${OBJC_IMPORT_LIST[SPORT_OBJ_LIST.indexOf(objClass)]!}\\n\\n`\n + `@interface ${objectName} : ${objClass}\\n\\n`\n + junk.hCode\n + '\\n@end\\n';\n let m = generateFileHead(`${objectName}.m`, seed, salt)\n + `#import \"${objectName}.h\"\\n`\n + junk.headerImportCode\n + '\\n'\n + `@interface ${objectName} ()\\n\\n@end\\n\\n`\n + `@implementation ${objectName}\\n\\n`;\n if (objClass === 'UIViewController') {\n m += '- (void)viewDidLoad {\\n [super viewDidLoad];\\n // Do any additional setup after loading the view from its nib.\\n}\\n\\n';\n }\n m += junk.mCode + '@end\\n';\n return { h, m };\n}\n\n/** Build one Swift file from a SwiftJunk tuple. */\nexport function generateSwiftFile(objectName: string, objClass: SwiftSuperclass, junk: SwiftJunk, seed: string, salt: string): string {\n let code = generateFileHead(`${objectName}.swift`, seed, salt)\n + 'import Foundation\\nimport UIKit\\n\\n'\n + `class ${objectName}: ${objClass} {\\n\\n`\n + junk.propertyCode\n + '\\n\\n';\n if (objClass === 'UIViewController') {\n code += ' override func viewDidLoad() {\\n super.viewDidLoad()\\n }\\n';\n }\n code += '\\n' + junk.methodCode + '}\\n';\n return code;\n}\n\n// ---------------------------------------------------------------------------\n// Ignorable-path predicate.\n// ---------------------------------------------------------------------------\n\nconst IGNORED_SUBSTRINGS: readonly string[] = [\n '/Pods/', '/.git/', '/Podfile', '/Podfile.lock', '/README.md', '/AppDelegate.', '/SceneDelegate.',\n '/.DS_Store', '/UserInterfaceState.xcuserstate', '/.svn/',\n];\n\n/** True for paths that must be skipped (never obfuscated). */\nexport function isIgnoredPath(relativePath: string): boolean {\n if (relativePath.includes('.framework')) return true;\n if (relativePath.includes('+')) return true;\n const normalized = relativePath.startsWith('/') ? relativePath : `/${relativePath}`;\n return IGNORED_SUBSTRINGS.some(part => normalized.includes(part));\n}\n\n// ---------------------------------------------------------------------------\n// Insertion transforms.\n// ---------------------------------------------------------------------------\n\nfunction classInterfacePattern(objectName: string): RegExp {\n return new RegExp(`@interface\\\\s+${objectName}(?:\\\\s|:|\\\\()`);\n}\n\n/** Insert ObjC junk declarations before the matching `@interface`'s `@end`. */\nexport function insertObjCHeaderJunk(content: string, objectName: string, hCode: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let importedUIKit = lines.some(line => line.includes('<UIKit/UIKit.h>'));\n let didImport = false;\n let isPassInterface = false;\n let added = false;\n for (const line of lines) {\n const stripped = line.trim();\n if (!didImport && (line.includes('#import') || line.includes('#include'))) {\n out.push(line);\n if (!importedUIKit) {\n out.push('#import <UIKit/UIKit.h>');\n out.push('');\n importedUIKit = true;\n }\n didImport = true;\n continue;\n }\n if (line.includes('@interface') && !line.includes('//@interface') && classInterfacePattern(objectName).test(line)) {\n isPassInterface = true;\n }\n if (stripped === '@end' && !line.includes('//@end') && !added && isPassInterface) {\n added = true;\n out.push('');\n out.push(hCode);\n out.push(line);\n continue;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n\n/** Insert ObjC junk method bodies before the matching `@implementation`'s `@end`. */\nexport function insertObjCImplJunk(content: string, objectName: string, mCode: string, headerImportCode: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let isLastEnd = false;\n let addedImport = false;\n for (const line of lines) {\n const stripped = line.replace(/\\s/g, '');\n if (stripped.includes('@interface') && !line.includes('//@interface')) isLastEnd = false;\n if (stripped.includes('@implementation') && !line.includes('//@implementation') && line.includes(`@implementation ${objectName}`)) isLastEnd = true;\n if ((stripped.includes('#import') || stripped.includes('#include')) && !addedImport) {\n out.push(line);\n if (headerImportCode.length > 0) out.push(headerImportCode.replace(/\\n$/, ''));\n addedImport = true;\n continue;\n }\n if (stripped === '@end' && isLastEnd) {\n out.push('');\n out.push(mCode);\n out.push('');\n out.push(line);\n continue;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n\n/** Insert Swift junk properties + methods right after the class/struct/extension opening brace. */\nexport function insertSwiftJunk(content: string, objectName: string, propertyCode: string, methodCode: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let count = 0;\n let addedPro = false;\n let addedRun = false;\n for (let line of lines) {\n const stripped = line.replace(/\\s/g, '');\n const isClassLine = stripped.includes(`class${objectName}:`)\n || stripped.includes(`extension${objectName}`)\n || stripped.includes(`struct${objectName}{`)\n || stripped.includes(`class${objectName}{`);\n if (isClassLine && !addedPro) count += 1;\n if (line.includes('{') && !addedPro && count === 1) count += 1;\n if (count === 2 && !addedPro) {\n line += propertyCode;\n line += '\\n';\n addedPro = true;\n }\n if (addedPro && !addedRun) {\n line += methodCode;\n addedRun = true;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// pbxproj registration.\n// ---------------------------------------------------------------------------\n\ninterface PbxSnippets {\n folderRef: string;\n folderBlock: string;\n fileRefs: string[];\n sources: string[];\n buildFiles: string[];\n}\n\nfunction registerInPbxproj(content: string, snippets: PbxSnippets): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let inGroup = false;\n let inSources = false;\n let addedFolderRef = false;\n let addedSources = false;\n for (const line of lines) {\n if (line.includes('/* Begin PBXGroup section */')) inGroup = true;\n if (line.includes('/* End PBXGroup section */')) inGroup = false;\n if (line.includes('/* Begin PBXSourcesBuildPhase section */')) inSources = true;\n if (line.includes('/* End PBXSourcesBuildPhase section */')) inSources = false;\n\n if (inGroup && !addedFolderRef && line.includes('children = (')) {\n out.push(line);\n out.push(` ${snippets.folderRef}`);\n addedFolderRef = true;\n continue;\n }\n if (inSources && !addedSources && line.includes('files = (')) {\n out.push(line);\n for (const item of snippets.sources) out.push(` ${item.trimEnd()}`);\n addedSources = true;\n continue;\n }\n if (line.includes('/* End PBXGroup section */')) {\n out.push(snippets.folderBlock.trimEnd());\n out.push(line);\n continue;\n }\n if (line.includes('/* End PBXFileReference section */')) {\n for (const item of snippets.fileRefs) out.push(`\\t\\t${item.trimEnd()}`);\n out.push(line);\n continue;\n }\n if (line.includes('/* End PBXBuildFile section */')) {\n for (const item of snippets.buildFiles) out.push(`\\t\\t${item.trimEnd()}`);\n out.push(line);\n continue;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Resource detection + cleanup.\n// ---------------------------------------------------------------------------\n\nconst RESOURCE_CLEAN_EXTENSIONS: readonly string[] = ['.jpg', '.bmp', '.png', '.jpeg', '.rgb', '.tif', '.gif', '.mp3', '.mp4', '.caf'];\n\nconst CODE_SEARCH_EXTENSIONS: ReadonlySet<string> = new Set(['h', 'm', 'mm', 'swift', 'c', 'cpp', 'cc', 'hpp', 'java', 'kt', 'dart', 'js', 'ts', 'jsx', 'tsx']);\nconst TEXT_SEARCH_EXTENSIONS: ReadonlySet<string> = new Set(['json', 'plist', 'strings', 'xml', 'storyboard', 'xib', 'html', 'htm', 'txt', 'md', 'csv', 'tsv', 'yml', 'yaml', 'css', 'scss', 'less']);\n\nfunction basenameOf(path: string): string {\n const parts = path.split('/');\n return parts[parts.length - 1]!;\n}\n\n/** True for loose resource files (not imagesets), mirroring `isResource`. */\nexport function isResourcePath(relativePath: string): boolean {\n const base = basenameOf(relativePath);\n return RESOURCE_CLEAN_EXTENSIONS.some(ext => base.endsWith(ext));\n}\n\n/** Resource name (basename up to the first dot), mirroring `searchAllResName`. */\nexport function resourceNameFromPath(relativePath: string): string {\n return basenameOf(relativePath).split('.')[0]!;\n}\n\nfunction imagesetDirOf(absolutePath: string): string | undefined {\n let dir = dirname(absolutePath);\n for (;;) {\n if (basenameOf(dir).endsWith('.imageset')) return dir;\n const parent = dirname(dir);\n if (parent === dir) return undefined;\n dir = parent;\n }\n}\n\nfunction imagesetRelative(relativePath: string): string {\n const parts = relativePath.split('/');\n const index = parts.findIndex(part => part.endsWith('.imageset'));\n return parts.slice(0, index + 1).join('/');\n}\n\n/** Names referenced by a single code line, mirroring `findResNameAtFileLine`. */\nexport function lineReferencesResource(line: string, resourceNames: ReadonlySet<string>): string[] {\n const refs: string[] = [];\n for (const raw of line.split('\"')) {\n let item = raw;\n if (item.includes('.')) item = item.split('.')[0]!;\n if (resourceNames.has(item)) refs.push(item);\n else if (resourceNames.has(`${item}@1x`)) refs.push(`${item}@1x`);\n else if (resourceNames.has(`${item}@2x`)) refs.push(`${item}@2x`);\n else if (resourceNames.has(`${item}@3x`)) refs.push(`${item}@3x`);\n }\n return refs;\n}\n\nfunction isSearchCarrier(relativePath: string): boolean {\n const ext = extension(relativePath);\n return CODE_SEARCH_EXTENSIONS.has(ext) || TEXT_SEARCH_EXTENSIONS.has(ext);\n}\n\nfunction cleanPbxproj(content: string, unusedNames: ReadonlySet<string>): string {\n const lines = content.split('\\n');\n const kept: string[] = [];\n for (const line of lines) {\n let drop = false;\n for (const name of unusedNames) {\n if (line.includes(name)) { drop = true; break; }\n }\n if (!drop) kept.push(line);\n }\n return kept.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Batch functions.\n// ---------------------------------------------------------------------------\n\n/**\n * Inject deterministic ObjC/Swift garbage methods into eligible source files.\n * Matched `.h`/`.m`/`.mm` pairs share one generated junk tuple (so declarations\n * and implementations stay in sync); `.swift` files get lazy properties + methods.\n */\nexport function insertJunkCode(files: readonly WalkEntry[], options: JunkCodeOptions, seed: string): TransformOutcome {\n const amount = Math.max(1, options.amount ?? 1);\n const rubPrefix = options.rubPrefix ?? DEFAULT_RUB_PREFIX;\n const eligible = files.filter(file => {\n const ext = extension(file.relative);\n return (ext === 'h' || ext === 'm' || ext === 'mm' || ext === 'swift') && !isIgnoredPath(file.relative);\n });\n\n const byStem = new Map<string, WalkEntry[]>();\n for (const file of eligible) {\n const stem = basenameWithoutExtension(file.relative);\n const list = byStem.get(stem) ?? [];\n list.push(file);\n byStem.set(stem, list);\n }\n\n const registry = newRegistry();\n const changedPaths: string[] = [];\n let changed = 0;\n\n for (const stem of [...byStem.keys()].sort()) {\n const entries = byStem.get(stem)!;\n if (entries.some(entry => extension(entry.relative) === 'swift')) {\n const state: SwiftGenState = { rubProMap: new Map(), registry };\n const junk = generateSwiftJunkInternal(amount, rubPrefix, seed, stem, state);\n registry.unused.set(stem, junk.funList);\n for (const entry of entries) {\n if (extension(entry.relative) !== 'swift') continue;\n const next = insertSwiftJunk(readFileSync(entry.absolute, 'utf8'), stem, junk.propertyCode, junk.methodCode);\n if (writeIfChanged(entry, next)) { changed += 1; changedPaths.push(entry.relative); }\n }\n } else {\n const state: ObjCGenState = { rubProMap: new Map(), headerFiles: [], registry };\n const junk = generateObjCJunkInternal(amount, rubPrefix, seed, stem, state);\n registry.unused.set(stem, junk.hFunList);\n for (const entry of entries) {\n const ext = extension(entry.relative);\n const content = readFileSync(entry.absolute, 'utf8');\n const next = ext === 'h'\n ? insertObjCHeaderJunk(content, stem, junk.hCode)\n : insertObjCImplJunk(content, stem, junk.mCode, junk.headerImportCode);\n if (writeIfChanged(entry, next)) { changed += 1; changedPaths.push(entry.relative); }\n }\n }\n }\n\n return { changed, changedPaths };\n}\n\n/**\n * Create deterministic garbage `.h`/`.m`/`.swift` files under a generated folder\n * and register them into the project's `project.pbxproj`.\n */\nexport function createJunkFiles(root: string, files: readonly WalkEntry[], options: JunkFileOptions, seed: string): TransformOutcome {\n const count = Math.max(1, options.count ?? 1);\n const amount = Math.max(1, options.amount ?? 1);\n const rubPrefix = options.rubPrefix ?? DEFAULT_RUB_PREFIX;\n const language = options.language ?? 'OC';\n const pbx = files.find(file => file.relative.endsWith('project.pbxproj'));\n\n const rng = new Rng(seed, 'junk-files');\n const folderName = rng.wordTitle() + rng.wordTitle();\n const folderUdid = deriveUuid(seed, `folder:${folderName}`);\n const folderAbsolute = join(root, folderName);\n mkdirSync(folderAbsolute, { recursive: true });\n\n const changedPaths: string[] = [];\n let changed = 0;\n const children: string[] = [];\n const fileRefs: string[] = [];\n const sources: string[] = [];\n const buildFiles: string[] = [];\n\n for (let index = 0; index < count; index += 1) {\n const salt = `file:${index}`;\n const objClass = SPORT_OBJ_LIST[rng.int(0, 2)] as ObjCSuperclass;\n\n if (language === 'Swift') {\n const objectName = objcGetMissObjName(objClass, seed, `${salt}:name`);\n const junk = generateSwiftJunk(amount, rubPrefix, seed, `${salt}:code`);\n const fileContent = generateSwiftFile(objectName, objClass, junk, seed, salt);\n writeFileSync(join(folderAbsolute, `${objectName}.swift`), fileContent);\n changed += 1;\n changedPaths.push(`${folderName}/${objectName}.swift`);\n const udid = deriveUuid(seed, `${objectName}.swift:ref`);\n const buildUdid = deriveUuid(seed, `${objectName}.swift:build`);\n children.push(`${udid} /* ${objectName}.swift */,`);\n fileRefs.push(`${udid} /* ${objectName}.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ${objectName}.swift; sourceTree = \"<group>\"; };\\n`);\n sources.push(`${buildUdid} /* ${objectName}.swift in Sources */,\\n`);\n buildFiles.push(`${buildUdid} /* ${objectName}.swift in Sources */ = {isa = PBXBuildFile; fileRef = ${udid} /* ${objectName}.swift */; };\\n`);\n } else {\n const objectName = objcGetMissObjName(objClass, seed, `${salt}:name`);\n const junk = generateObjCJunk(amount, rubPrefix, seed, `${salt}:code`);\n const { h, m } = generateObjCFile(objectName, objClass, junk, seed, salt);\n writeFileSync(join(folderAbsolute, `${objectName}.h`), h);\n writeFileSync(join(folderAbsolute, `${objectName}.m`), m);\n changed += 2;\n changedPaths.push(`${folderName}/${objectName}.h`, `${folderName}/${objectName}.m`);\n const hUdid = deriveUuid(seed, `${objectName}.h:ref`);\n const mUdid = deriveUuid(seed, `${objectName}.m:ref`);\n const mBuild = deriveUuid(seed, `${objectName}.m:build`);\n children.push(`${hUdid} /* ${objectName}.h */,`, `${mUdid} /* ${objectName}.m */,`);\n fileRefs.push(`${hUdid} /* ${objectName}.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ${objectName}.h; sourceTree = \"<group>\"; };\\n`);\n fileRefs.push(`${mUdid} /* ${objectName}.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ${objectName}.m; sourceTree = \"<group>\"; };\\n`);\n sources.push(`${mBuild} /* ${objectName}.m in Sources */,\\n`);\n buildFiles.push(`${mBuild} /* ${objectName}.m in Sources */ = {isa = PBXBuildFile; fileRef = ${mUdid} /* ${objectName}.m */; };\\n`);\n }\n }\n\n const folderBlock = `\\t\\t${folderUdid} /* ${folderName} */ = {\\n\\t\\t\\tisa = PBXGroup;\\n\\t\\t\\tchildren = (\\n`\n + children.map(child => `\\t\\t\\t\\t${child}`).join('\\n')\n + `\\n\\t\\t\\t);\\n\\t\\t\\tpath = ${folderName};\\n\\t\\t\\tsourceTree = \"<group>\";\\n\\t\\t};`;\n\n if (pbx) {\n const next = registerInPbxproj(readFileSync(pbx.absolute, 'utf8'), {\n folderRef: `${folderUdid} /* ${folderName} */,`,\n folderBlock,\n fileRefs,\n sources,\n buildFiles,\n });\n if (writeIfChanged(pbx, next)) { changed += 1; changedPaths.push(pbx.relative); }\n }\n\n return { changed, changedPaths };\n}\n\n/**\n * Detect resources never referenced by project code, remove their pbxproj lines,\n * and delete the files / `.imageset` directories.\n */\nexport function cleanUnusedResources(files: readonly WalkEntry[], options: CleanResourcesOptions = {}): TransformOutcome {\n const ignore = new Set(options.ignore ?? []);\n const resNameMap = new Map<string, { path: string; isDir: boolean; relative: string }>();\n\n for (const entry of files) {\n const rel = entry.relative;\n if (`/${rel}`.includes('/Pods/') || rel.includes('.appiconset') || rel.includes('.launchimage')) continue;\n const imageset = imagesetDirOf(entry.absolute);\n if (imageset) {\n const name = basenameOf(imageset).split('.')[0]!;\n resNameMap.set(name, { path: imageset, isDir: true, relative: imagesetRelative(rel) });\n } else if (isResourcePath(rel)) {\n resNameMap.set(resourceNameFromPath(rel), { path: entry.absolute, isDir: false, relative: rel });\n }\n }\n\n for (const name of ignore) resNameMap.delete(name);\n\n const remaining = new Set(resNameMap.keys());\n for (const entry of files) {\n if (!isSearchCarrier(entry.relative)) continue;\n const content = readFileSync(entry.absolute, 'utf8');\n for (const line of content.split('\\n')) {\n for (const ref of lineReferencesResource(line, remaining)) resNameMap.delete(ref);\n }\n }\n\n const changedPaths: string[] = [];\n let changed = 0;\n\n const pbx = files.find(file => file.relative.endsWith('project.pbxproj'));\n if (pbx) {\n const next = cleanPbxproj(readFileSync(pbx.absolute, 'utf8'), new Set(resNameMap.keys()));\n if (writeIfChanged(pbx, next)) { changed += 1; changedPaths.push(pbx.relative); }\n }\n\n for (const item of resNameMap.values()) {\n if (item.isDir) {\n if (existsSync(item.path)) { rmSync(item.path, { recursive: true, force: true }); changed += 1; changedPaths.push(item.relative); }\n } else if (existsSync(item.path)) {\n unlinkSync(item.path);\n changed += 1;\n changedPaths.push(item.relative);\n }\n }\n\n return { changed, changedPaths };\n}\n"],"mappings":"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"}
|