• iOS 马甲包制作+垃圾OCSwift代码生成脚本 文章目录iOS 马甲包制作+垃圾OCSwift代码生成脚本一、马甲包介绍1、什么是马甲包3、怎么制作马甲包二、OC垃圾代码生成脚本三、Swift垃圾代码生成脚本 一、马甲包介绍 ...

    一、马甲包介绍

    1、什么是马甲包

    马甲包是利用APP Store规则漏洞,通过开发人员的技术手段,在多个地区平台上架同一产品。马甲包和主包内容功能是一样的。

    2、为什么要制作马甲包

    不同的产品定位,不同的产品需要,会需要一套代码上架多个产品。

    1. 产品定位不一样,马甲包用来做一些导量、刷分。
    2. 抗风险。先用马甲包测试新功能,看看市场反应,好的话再在主包上迭代。
    3. 需要上架到不同国家地区应用市场。

    3、怎么制作马甲包

    UI部分:

    1. icon和启动图替换
    2. 代码里面文案修改

    代码部分:

    1. 修改工程名字
    2. 修改图片资源,改变图片的hash值,不要让检测到以前被拒的资源
    3. 修改类名
    4. 修改方法名
    5. 打乱方法顺序
    6. 添加混淆代码、垃圾代码

    打包提审:

    1. 建议换一个开发者账号去提交,并且换一个ip
    2. 更换一台新电脑打包
    3. 项目描述、项目宣传不能和之前的一样
    4. 测试账号不能和之前一样
    5. 一个账号只提交一个包,一台电脑不能提交超过23个包

    二、OC垃圾代码生成脚本

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    #第一步:首先生成一个500位的数组 驼峰类型的元素 用作文件名 eg:AsdfdfGsd
    import random
    import os,sys
    import string
    
    first = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    second = "abcdefghijklmnopqrstuvwxyz"
    number = "345"
    index = 0
    array = []
    for i in range(500):
        final=(random.choice(first))
        index = random.randint(3, 5)
        for i in range(index):
            final+=(random.choice(second))
        final += (random.choice(first))
        for i in range(index):
            final+=(random.choice(second))
        array.append(final)
    
    
    print (array)
    
    #第二步:
    #用上边生成的数组来创建对应的.h和.m文件
    # -*- coding: utf-8 -*-
    import random
    import os
    import string
    #创建.h文件
    def text_createH(fileNmae,msg,msg1,propertyNumber,methodArray,msg3):
        full_path = sys.path[0] + '/OCFiles/' + fileNmae + '.h'
        file = open(full_path, 'w')
        file.write('//\n//  '+fileNmae+'.h\n//  SajiaoShopping\n\n//  Created by 某 波 bo on 15/10/23.\n//  Copyright ©  2017年 阿里郎. All rights reserved.\n//\n\n')
        file.write(msg)
        file.write(msg1)
        propryNameArray = []
        for index in range(1,propertyNumber):
            propryNameArray.append(random.choice(array))
        propryNameArray = list(set(propryNameArray))
        for propertyName in propryNameArray:
            file.write('@property(nonatomic,strong)'+random.choice(classArray)+' * '+propertyName+';\n')
        file.write('\n\n')
        for methodName in methodArray:
            file.write('- (void)pushTo'+methodName+'VC:(NSDictionary *)info;\n')
        file.write(msg3)
        file.close()
        print('Done')
    #创建.m文件
    def text_createM(fileNmae,msg,msg1,methodArray,msg3):
        full_path = sys.path[0] + '/OCFiles/' + fileNmae + '.m'
        file = open(full_path, 'w')
        file.write('//\n//  '+fileNmae+'.m\n//  SajiaoShopping\n\n//  Created by 某 波 bo on 15/10/23.\n//  Copyright ©  2017年 阿里郎. All rights reserved.\n//\n\n')
        file.write(msg)
        file.write(msg1)
        for methodName in methodArray:
            file.write('- (void)pushTo'+methodName+'VC:(NSDictionary *)info\n{\n\n  NSMutableArray *array = [NSMutableArray array];\n')
            number = random.randint(3, 10)
            for i in range(1,number):
                file.write('  [array addObject:@"'+random.choice(array)+'"];\n')
            file.write('\n}\n\n')
        file.write(msg3)
        file.close()
        print('Done')
    
    classArray = ['NSString','UILabel','NSDictionary','NSData','UIScrollView','UIView']
    array = ['HwxrFvrj', 'QnzduQbtdd', 'PvcrwLtqhf', 'UvdhDbjn', 'SuntmyTxvyzg', 'CvlxwBipbp', 'GzrdyzIbimvz', 'CqsjqMmgsp', 'OxaaeuWjhasc', 'NjiardRvwgbi', 'NcculmLtpljq', 'ApoqQrll', 'GkgokDyvjb', 'EblldkVouplj', 'KfdrFvnw', 'SfhyhObftc', 'SmruByoc', 'YzcccvXmpmit', 'OmqvaHpxat', 'XzytsUyvyd', 'MjforNnnyi', 'ZvjhuIdogs', 'BzfrxzSeahxc', 'PycycwFjtpny', 'XvngtoSedljr', 'DktiaCbucd', 'AqbplNuodc', 'MzkvgZuala', 'KdwzIoej', 'AaynatUpqcfd', 'IyvwhZvtjc', 'UmijGmsy', 'AoayndXxghym']
    array = list(set(array))
    
    for name in array:
        number = random.randint(3, 10)
        methodArray = []
        for i in range(1,5):
            methodArray.append(random.choice(array))
        methodArray = list(set(methodArray))#数组去重
        text_createH(name+'ViewController', '#import <UIKit/UIKit.h>\n','@interface '+name+ 'ViewController:'+ 'UIViewController\n\n',number,methodArray,'\n\n@end')
        text_createM(name+'ViewController', '#import "'+name+'ViewController.h"\n\n' '@interface '+ name+'ViewController()\n\n @end\n\n','@implementation '+name+'ViewController\n\n- (void)viewDidLoad { \n\n [super viewDidLoad];\n\n}\n\n',methodArray,'\n\n@end')
    
    

    三、Swift垃圾代码生成脚本

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    
    
    import random
    
    import os,sys
    
    import string
    
    #创建.swift文件
    
    def createSwift(fileNmae,propertyNumber,methodArray):
    
        full_path =  sys.path[0] + '/SwiftFiles/' + fileNmae + '.swift'
    
        file = open(full_path, 'w')
    
        file.write('//\n//  '+fileNmae+'.swift\n//  LinkMall\n\n//  Created by Meng on 2018/9/17.\n//  Copyright © 2018年 OneThing Ltd. All rights reserved.\n//\n\n')
    
        file.write('import UIKit \n\n' + 'class '+fileNmae+': UIViewController {\n\n')
        
        propryNameArray = []
    
        for index in range(1,propertyNumber):
    
            propryNameArray.append(random.choice(array))
    
        propryNameArray = list(set(propryNameArray))
    
        for propertyName in propryNameArray:
    
            file.write('    public var '+propertyName+':'+random.choice(classArray)+'!\n')
    
        file.write('\n\n')
        
        file.write('    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n')
       
    
        for methodName in methodArray:
    
            file.write('    public func '+methodName+'TOVC() {\n\n       var realArr = Array<String>()\n')
    
            number = random.randint(10, 15)
    
            for i in range(1,number):
    
                file.write('       realArr.append("'+random.choice(array)+'")\n')
    
            file.write('\n    }\n\n')
    
        file.write('}')
    
        file.close()
    
        print('Done')
    
    
    def createClassName():
        
        first = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
        second = "abcdefghijklmnopqrstuvwxyz"
    
        index = 0
    
        array = []
    
        # 设置生成多少个类
        classNumber = 100
        for i in range(classNumber):
    
            final=(random.choice(first))
            #字符串长度
            index = random.randint(10, 15)
    
            for i in range(index):
    
                final+=(random.choice(second))
    
            final += (random.choice(first))
    
            for i in range(index):
    
                final+=(random.choice(second))
    
            array.append(final)
        return array
    
    #属性类型
    classArray = ['UIColor','UILabel','UITableView','UISlider','UIScrollView','UIView','UIButton']
    
    array = createClassName()
    
    array = list(set(array))
    
    for name in array:
    
        number = random.randint(10, 15)
    
        methodArray = []
    
        for i in range(50,100):
    
            methodArray.append(random.choice(array))
    
        methodArray = list(set(methodArray))#数组去重
        
        createSwift(name+'VController',number,methodArray)
    
    
    
    展开全文
  • oc中嵌入swift代码

    2017-02-25 18:00:30
    oc中使用swift代码,只需要加入一个头文件即可。这个头文件是这么写的:#import <项目名-swift.h>· 例如我的项目: 我们点击进去这个头文件发现: 原来他把swift的头文件都放这这个头文件来,原来时这么做...

    oc中想要嵌入swift代码,怎么办呢?也很好办。下边先讲讲思路:
    在编译时oc会把swift的头文件统一放入一个文件进行编译的。
    在oc中使用swift代码,只需要加入一个头文件即可。这个头文件是这么写的:#import <项目名-swift.h>·
    例如我的项目:
    这里写图片描述
    我们点击进去这个头文件发现:
    这里写图片描述
    原来他把swift的头文件都放这这个头文件来,原来时这么做的。苹果还是很聪明的。哈哈!!!

    展开全文
  • 虽然网上关于swiftoc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣. 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给...
     对于已经工作的开发者,并不适合也没有条件从一个全新的swift项目开始,进行开发. 虽然网上关于swift和oc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣.
    • 现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给自己,给项目,给swift一个缓冲区,都是极好的.

      说了这么多,开始上代码.

      现在的背景是: 已经有一个oc项目了,我想要加入 swfit,并且实现 oc调用 swift ,swift调用oc .

      1.新建一个swift文件

      2.接下来会询问你是否建立桥接文件,点击是 ,那么我后面的就是多余的了,所以选择取消,我们手动建立桥接文件

      3.手动建立桥接文件:新建头文件

      关于命名: 有经验的人都知道,这个头文件是项目公用的,同时如果自动创建,文件名也是 :

      项目名-Bridging-Header.h

      但是因为我现在的项目名是中文,所以我自己命名了一下.

       

      4. 配置头文件

      在build setting里面搜索 swift ,根据实际情况进行配置:

      注意:是相对于工程文件所在的相对路径.从 Finder里面看,不要让项目中得group扰乱你的判断

      5.在头文件中引入需要的 oc头文件,这里我就用 UIKit了

       

      6.编写代码

       

      可以看到,我们可以使用UIKit的类了

      注意:关于自定义类,希望有个好的命名规范,那么在混合编程中,你将受益无穷

      7.oc调用swift

      现在因为测试我想把窗口的根控制器设置为我的swift的那个.

      因为swift没有头文件,所以不好办了...

      其实,系统默认给我们生成了头文件(需要我们的swift类是NSObject的直接或者间接子类),我们只要引入

      项目名-Swift.h

      没办法了,我的项目名是中文...

      引入:

      8.使用 swift的类

      9.运行

      一切正常 (好丑,不要吐槽)

       


    展开全文
  • 在开发过程中,我们两个项目的工程一个是使用Swift代码编写的,一个是使用OC代码编写的,现在要实现相同的功能,打算在OC中嵌入Swift代码,下面我以一个新的工程给大家举例一下操作的过程: 1、在OC工程中,创建一...

    在开发过程中,我们两个项目的工程一个是使用Swift代码编写的,一个是使用OC代码编写的,现在要实现相同的功能,打算在OC中嵌入Swift代码,下面我以一个新的工程给大家举例一下操作的过程:

    1、在OC工程中,创建一个Swift文件,这时候会问你是否生成桥接文件,点击是,这时候系统会自动生成Swift的桥接文件,如下图:


    2、在Build Setting中,将Defines Module设置成YES,如下图:

    注意:Build Setting中选中的要跟上图中选中的一样,否则可能找不到。

    3、查看项目的Product Name是否跟target一样,如下图:

    4、在需要引用Swift代码的地方,引入下图中的.h文件,如下图:

    注意:这个.h文件是系统自己创建的,并不需要手动创建,不是引入桥接文件的.h,如果出错查看是否是引入错误导致的。如果没有找到上图中的.h,查看Build Setting的选中是否是All和Combined。

    展开全文
  • OCSwift混合使用

    2017-07-11 09:13:02
    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看...

    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。

    • OC中引用Swift文件
    • Swift中引用OC文件,以及第三方库
    • Xcode8以后编译swift2.x
    • OC引用Swift第三方库

    一、OC中如何引用Swift文件:
    首先先来创建一个object-c语言的项目,然后直接一个swift类,这时会弹出如下提示:
    配置桥接头文件
    先选择Do not Create,稍后会提到,系统会自动创建一个格式:xxx项目名-Swift.h的头文件,不显示但是可以直接引用,直接引用,这时发现报错了。
    报错了
    这是为什么呢?虽然一般情况下是直接引用xxx项目名-Swift.h,真正需要引用的是Product Moudle Name对应的文件名:
    模块名配置
    也可在此基础上搜索swift,对应的文件名正是想要的文件名,为什么上面还要提搜索pack找Product Moudle Name直接搜swift不就好了吗?因为这个名字是拼出来的:Product Moudle Name-Swift.h,可以去pack里面删除Product Moudle Name对应的内容,再回来搜swift看一下就明白了。
    搜索swift
    项目在创建的时候名称有的时候可能有歧义系统自动帮我们修改。swift在OC项目中是作为Moudle来使用的,名称继承自PROJECT下的Product Moudle Name,导入时报错请自行检查是否匹配。
    目前为止导入头文件成功了,调用一下SwiftTest类中的log方法。
    方法配置
    却发现一直报未定义该类的错误:
    未定义报错
    点击生成的项目名-Swift.h的头文件里面却发现没有关于Swift声明:
    未声明该类
    后来经过查找发现是因为没有创建桥接文件导致的,手动来创建一下桥接文件,命名规则:项目名-Bridging-Header。
    创建桥接文件
    到项目里手动配置文件路径:
    配置方法
    配置完成后clean然后build点击项目名-Swift.h进入就可以发现定义swift类的声明,Command + R 运行成功。
    二、Swift中引用OC文件,以及第三方库
    swift引用OC文件比较简单:
    1)创建桥接文件(参考上面步骤)
    2)把需要用到类或者第三方SD、framework头文件引入
    3)直接在swift文件中使用
    由于比较简单不在赘述,稍后会提到注意事项。
    三、Xcode8以后编译swift2.x以及pod引用的swift框架
    Xcode8以后swift的currentVersion改为3.0,如果是swift2.x项目打开往往会有这样的提示:
    转换提示
    如果你想转换的直接点击convert,但是要注意备份小心一万点爆红,如果点击了later之后又想转换了可以进行如下操作:
    手动转换
    如果想要继续编译swift2.x需要设置版本:
    设置版本
    如果没有使用第三方框架那么现在就可以build了,而且是成功的,但是如果使用了第三方的framework,那么每个framework都需要设置一次,如下:
    设置pod的版本
    这里几点需要注意的:
    1)pod里面的framework的版本必须与taget里面的一致否则编译失败。
    2)必须与最低版本一致有一个framework使用了swift2.x其他都必须设置为YES
    3)任何时候点击convertToCurrentVersion都是转换到最新版本也就是当前的swift3.0,即使你设置了使用以前版本再次进行转换也是转换到swift3.0不会转换到以前版本。
    4)每次pod以后之前的配置都会重置,需要从新设置版本。但是可以在Podfile里面加入如下代码,将会对所有提交的framework进行设置:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
      end
     end
    end

    如下图:
    pod设置
    四、OC引用Swift的framework:
    配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>】也可以通过引入模块的方式:@import framework;这两种方式效果相同。
    注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
    ps:文章有点啰嗦,本人系新手,主要是记录给自己看。

    展开全文
  • swift 调用 OC: 1 创建工程:打开xcode 选择ios平台下的sing view application ,选择swift语言,创建工程命名为SwiftCallOC 2 添加一个基于OC的cocoa class 类,命名为继承UIImageView的QFImageView,然后会弹出一...
  • 最近由于项目需求需要使用Swift做开发,但之前的好多有用的东西都是使用OC写的,鉴于这种情况最好的方式当然是使用swift重写,但这样的工作量太大,而且不能保证功能的稳定性,所以自己就尝试的使用Framework来嵌入...
  • swift 调用OC代码

    2017-03-14 14:28:14
    swift调用oc代码swift
  • 本文旨在帮助开发者快速从OC开发过渡到Swift开发,挑选了一些比较浅显的但是比较常用的Swift语法特性,在介绍的过程中,通常会拿OC中的语言特性作比较,让大家更好的注意到Swift的不同。 另外需要说明的是,笔者也...
  • 在项目中右键添加一个swift文件,我添加的LearnSwift.swift添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h。...
  • 参考资料: ... ... 两天时间探索,期间不知道遇到了多少问题,各种google和Stack Overflow,甚至都求助了群友的力量。期间也想过放弃,还好有一颗不甘的心。终于成功了!...开心,哈哈,希望有缘人遇到同样问题的话,下面...
  • Ocswift区别

    2016-06-17 10:13:44
    Ocswift区别 Ocswift区别(文件结构) 1.文件后缀名 oc的文件后缀名为:头文件.h 主体文件.m swift文件后缀名为:.swift   2. 代码分隔符 oc中使用分号;作为代码分隔符 swift中无需使用代码分隔符,以...
  • 下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下。 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被...该文章主要是OC代码
  • Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与...现在我们先来了解一下SwiftOC基础的小异同(不过如果要说它与OC有什么不同,感觉很不同啊~~~) 1.输出日志不同 2.常量变量定义不同,swif...
  • 1.swift 混编 oc 第一步:新建一个swift 的工程 第二步:新建或者导入oc文件,在这里我新建了一个oc的视图 第三步:新建桥文件 在桥文件中导入相应的头文件 第四步:设置相应...
  • 创建swift项目调用oc代码swift里创建oc类  或者导入OC文件 会提示创建一个桥接文件 下面就是那个桥接文件内容 // // Use this file to import your target's public headers that you would ...
  • Cocoapods 是 iOS 应用的包管理程序。...导入 Alamofire(swift库)和AFNetworking(OC库)这两个个第三方库。本教程的环境基于 iOS8 和 Xcode7.3.1。 打开 Xcode 使用 Single View Application 创建一个项目。项
  • swiftOCSwift混编

    2019-08-20 10:01:07
    1、在Swift工程添加OC代码swift语言里,同一个项目内的文件基本会放在同一个命名空间里,所以没有.h文件。如果想在swift工程中添加OC代码,需要解决怎么引用OC代码的头文件问题。具体的解决办法就是:新建一个...
  • SwiftOC混合编程

    2015-07-13 11:27:41
    Swift和Objc混合编程注意是Swift中加入Oc代码,目前不能在Oc加入Swift代码。新建项目后,然后新建Oc文件,语言选择Oc, 完成后弹出对话框,表达的意思是Swift与Oc进行桥接。 选择Yes,如果选择了No,那么将不能...
1 2 3 4 5 ... 20
收藏数 2,871
精华内容 1,148
热门标签