GithubHelp home page GithubHelp logo

shmxybfq / tfeasycoder Goto Github PK

View Code? Open in Web Editor NEW
133.0 133.0 20.0 1.77 MB

一个可以用copy和paste提高编程效率的框架:为UIKit和Foundation的所有公开类添加了快速创建对象的方法并且为这些类的所有非私有属性添加了链式编程方法.

License: MIT License

Objective-C 86.14% Ruby 0.12% Rich Text Format 13.74%

tfeasycoder's People

Contributors

githubhqs avatar shmxybfq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tfeasycoder's Issues

CAEmitterBehavior must be removed,said by AppStore team

Dear developer,

We have discovered one or more issues with your recent delivery for "xx". To process your delivery, the following issues must be corrected:

Non-public API usage:

The app contains or inherits from non-public classes in MacaoAdminBus-appStore: CAEmitterBehavior
If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.

If you think this message was sent in error and that you have only used Apple-published APIs in accordance with the guidelines, send the app's nine-digit Apple ID, along with detailed information about why you believe the above APIs were incorrectly flagged, to [email protected]. For further information, visit the Technical Support Information page.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

能否考虑修改TF_LAZYLOAD_OBJC_CUS这个懒加载宏定义?(已创建pull request)

现在宏定义为:
/**

  • 懒加载属性,class 初始化方法为init,使用方法见github
  • @param __CLASS 属性类型
  • @param __PROPERTY 属性定义值
  • @param __BLOCK 一个返回属性
  • @return 属性
    */
    #define TF_LAZYLOAD_OBJC_CUS(__CLASS,__PROPERTY,__BLOCK)
    TF_SYNTHESIZE(__PROPERTY);
    -(__CLASS *)__PROPERTY{
    if (!_##__PROPERTY)
    ##__PROPERTY = [[__CLASS alloc]init];
    __BLOCK(
    ##__PROPERTY);
    return _##__PROPERTY;}\

我在使用过程中发现,新手很容易在使用TF_LAZYLOAD_OBJC_CUS犯错:
比如设置按钮图片这种操作如果放在TF_LAZYLOAD_OBJC_CUS懒加载中,在其他地方修改图片后,在按钮getter方法被调用时又在TF_LAZYLOAD_OBJC_CUS的block中被初始化为初始图了!
大多情况下我们应该是不希望getter方法被调用时,重复之前的block设置。所以宏定义时,是否可以考虑把block代码用大括号括起来,样子大概改为如下形式:
#define TF_LAZYLOAD_OBJC_CUS(__CLASS,__PROPERTY,__BLOCK)
TF_SYNTHESIZE(__PROPERTY);
-(__CLASS *)__PROPERTY{
if (!_##__PROPERTY)
{
##__PROPERTY = [[__CLASS alloc]init];
__BLOCK(
##__PROPERTY);
}
return _##__PROPERTY;}\

以下是现在遇到的问题不太好的解决方法:
2017-05-27 17 15 01
2017-05-27 17 19 12

上架AppStore报私有API被拒

Non-public API usage:

The app contains or inherits from non-public classes in Frameworks/TFEasyCoder.framework/TFEasyCoder: CAEmitterBehavior

改更新获取当前机器型号了,iPhone12已经出来了

/**

  • 获取当前机器型号
  • @return 当前机器型号名称
  • 需要导入框架 #include <sys/types.h>和#include <sys/sysctl.h>
    */
  • (NSString *)tf_code_pre(currentDeviceModel){
    int mib[2];
    size_t len;
    char *machine;

    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;
    sysctl(mib, 2, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2, machine, &len, NULL, 0);

    NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
    free(machine);

    //iphone
    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G (A1203)";
    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G (A1241/A1324)";
    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS (A1303/A1325)";
    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)";
    if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)";
    if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)";
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S (A1387/A1431)";
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)";
    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)";
    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (A1456/A1532)";
    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)";
    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)";
    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)";
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)";
    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)";

    if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
    if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
    if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
    if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
    if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
    if ([platform isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
    if ([platform isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";

    if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8 (A1863/A1906/A1907)"; // Global
    if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus (A1864/A1898/A1899)"; // Global
    if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X (A1865/A1902)"; // Global
    if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8 (A1905)"; // GSM
    if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus (A1897)"; // GSM
    if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X (A1901)"; // GSM
    if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS (A1920/A2097/A2098/A2100)";
    if ([platform isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max";
    if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max (A1921/A2101/A2102/A2104)";
    if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR (A1984/A2105/A2106/A2108)";
    //2019年9月发布,更新三种机型:iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max
    if ([platform isEqualToString:@"iPhone12,1"]) return @"iPhone 11";
    if ([platform isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro";
    if ([platform isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max";
    //2020年4月发布,更新一种机型:iPhone SE2
    if ([platform isEqualToString:@"iPhone12,8"]) return @"iPhone SE2";

集成此框架后,上架会提示无效二进制。解决办法如下:

苹果邮件:
We have discovered one or more issues with your recent delivery for "xxAPP". To process your delivery, the following issues must be corrected:

Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

解决办法:在plist中需添加如下描述:
NSPhotoLibraryUsageDescription App需要您的同意,才能访问相册

大神可有其他解决方案?或则干脆去掉 UIViewController+TFKit.h 中photo相关的代码?

NSObject+TFExecute.m文件中是否去掉引用 #import "ViewController.h"更好?

当我的工程中没有这个ViewController.h头文件时,#import "ViewController.h"会报错,我在NSObject+TFExecute.m中
1.删除#import "ViewController.h"
2.
objc_property_t *properties = class_copyPropertyList([ViewController class], &pCount);改为
objc_property_t *properties = class_copyPropertyList([UIViewController class], &pCount);
运行工程错误消失。
ps:大神,我这样做是否会影响本框架其他功能的正常使用,是否会附带产生隐藏bug?

很好用,有一点遗憾。

就是有一百多个警告,很多方法或属性都快过期了。大神可以把警告都处理下然后发布一个新版本吗?

在UIView里面连续创建UIButton,点击事件的问题

代码如下;
TF_LAZYLOAD_OBJC(UIButton, button1);
TF_LAZYLOAD_OBJC(UIButton, button2);
TF_LAZYLOAD_OBJC(UIButton, button3);

  • (id) initWithFrame:(CGRect)aRect {
    self = [super initWithFrame:aRect];
    if (self) {
    kdeclare_weakself;
    CGFloat buttonWidth = [UIScreen mainScreen].bounds.size.width/3;
    [self.button1 easyCoder:^(UIButton *ins) {
    [ins setTitle:@"收藏" forState:UIControlStateNormal];
    [ins setBackgroundColor:[UIColor tf_randomColor]];
    ins.tag = 1;
    [ins addTarget:self action:@selector(buttonTouDown:) forControlEvents:UIControlEventTouchDown];
    [weakSelf addSubview:ins];
    [ins mas_makeConstraints:^(MASConstraintMaker *make) {
    make.left.equalTo(weakSelf).offset(0);
    make.top.equalTo(weakSelf).offset(0);
    make.width.offset(buttonWidth);
    make.height.offset(50);
    }];
    }];
    [self.button2 easyCoder:^(UIButton *ins) {
    [ins setTitle:@"订阅" forState:UIControlStateNormal];
    [ins setBackgroundColor:[UIColor tf_randomColor]];

          ins.tag = 2;
          [ins  addTarget:self action:@selector(buttonTouDown:) forControlEvents:UIControlEventTouchDown];
          [weakSelf addSubview:ins];
          [ins mas_makeConstraints:^(MASConstraintMaker *make) {
              make.left.equalTo(weakSelf.button1.mas_right).offset(0);
              make.top.equalTo(weakSelf).offset(0);
              make.width.offset(buttonWidth);
              make.height.offset(50);
          }];
      }];
      [self.button3 easyCoder:^(UIButton *ins) {
          [ins setTitle:@"夜间" forState:UIControlStateNormal];
          [ins setBackgroundColor:[UIColor tf_randomColor]];
          ins.tag = 3;
          [ins addTarget:self action:@selector(buttonTouDown:) forControlEvents:UIControlEventTouchDown];
          [weakSelf addSubview:ins];
          [ins mas_makeConstraints:^(MASConstraintMaker *make) {
              make.left.equalTo(weakSelf.button2.mas_right).offset(0);
              make.top.equalTo(weakSelf).offset(0);
              make.width.offset(buttonWidth);
              make.height.offset(50);
          }];
      }];
    

    }

    return self;
    }
    第一个button的点击事件有,但是其他的就没有,这个是什么问题??

为何RAC在tf框架的懒加载中TF_LAZYLOAD_OBJC_CUS无法被调用?

TF_LAZYLOAD_OBJC_CUS(UIButton, gBtn4HideSelf, ^(UIButton *ins){
[ins setTitle:@"显示自我" forState:UIControlStateNormal];
[ins setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

/** 下面方法不会被执行,即:rac不能在tf框架的懒加载中使用。 */

// [[ins rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
// ins.selected = !ins.selected;
// if(ins.selected){//正显示自我
// [self.view bringSubviewToFront:self.gV4PushPreview];
// [ins setTitle:@"隐藏自我" forState:UIControlStateSelected];
// }else{
// [self.view sendSubviewToBack:self.gV4PushPreview];
// [ins setTitle:@"显示自我" forState:UIControlStateSelected];
// }
// }];
})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.