Skip to content

Commit 96fff83

Browse files
committed
update much
1. update api 2. update readme 3. add ci
1 parent a897b96 commit 96fff83

File tree

12 files changed

+525
-20
lines changed

12 files changed

+525
-20
lines changed

.travis.yml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
osx_image: xcode9.2
2+
language: objective-c
3+
xcode_workspace: BlockHookWorkSpace
4+
xcode_scheme: BlockHookKit
5+
xcode_sdk: iphoneos11.2
6+
env:
7+
global:
8+
- FRAMEWORK_NAME=BlockHookKit
9+
before_install:
10+
- brew update
11+
- brew outdated carthage || brew upgrade carthage
12+
- cd libffi
13+
- git submodule init
14+
- git submodule update
15+
- "./autogen.sh"
16+
- "./configure"
17+
- python generate-darwin-source-and-headers.py
18+
before_script:
19+
before_deploy:
20+
- carthage build --no-skip-current
21+
- carthage archive $FRAMEWORK_NAME
22+
script: xcodebuild -workspace BlockHookWorkSpace.xcworkspace -scheme BlockHookSample -configuration Release -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO
23+
deploy:
24+
provider: releases
25+
api_key:
26+
secure: bfE7slv9dJNwMdFodHjjrQkvakQDImBFrg4MnL6NwibcKjnayefsfV4iGy1cHxI0PUPTHs8T3ZPm5987ViLZryg+s9UrtZRtGEtIeLYrcRvPjr3sBSj9jnbS9vWYvuXOiYGkuYHRIwkY4iqA7ULOn0s86HKWWxcYUcUKGv94/JwvWTxH8SCd1LaC42JVazajpF9DdlZzwjcu/4qQCsrfapPVetjO0R4YblERmq8ZZBODUJgV2WAaPdMJeuiE6/90YYdrJ3zbntHRWNqptGOObYSvH2bcXiDPzCSjGi7BQ7r5TP3sjrL8oX6SVvmCFiqqWno2pycAyn6MVkOrmWmYAy/84QVnSJ6hL8RDA/XPoOZFPWiFUyS6+5T1yYbcEcxHwbXF9EUK4CDSiNUMmy3DPX9SlI1PSj8AgF9gbJzQ20Vv2xQ7kq3tQO40pXtoPrP/ve+3drJs3T3WqYcGf33dTy5yd78N25SZY4kensKtd8X+ldjMtAfOURAOqwnaQ/Zqb/sq5frEkrewrj7C4m5ZxwFrejFdywl2Q1ptXY+dF6wj28X3gwjnMuzUyHH38umJ1naRQQpnOU/zcu+hix2u555Wd/5AyylbGXSXClBYR8cxjLSyAL6zL2TGVifW0aGEyNZwf3AGu2QnPxbdNvkVYTK4BAl6pt1pNYMx5+MjQog=
27+
file: BlockHookKit.framework.zip
28+
on:
29+
repo: yulingtianxia/BlockHook
30+
tags: true

Assets/logo.png

335 KB
Loading

BlockHook.podspec

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Pod::Spec.new do |s|
2+
s.name = "BlockHook"
3+
s.version = "1.0.0"
4+
s.summary = "Hook Objective-C block with libffi."
5+
s.description = <<-DESC
6+
You can hook a block using 4 modes (before/instead/after/dead). This method returns a `BHToken` instance for more control. You can `remove` a `BHToken`, or set custom return value to its `retValue` property.
7+
DESC
8+
s.homepage = "https://github.com/yulingtianxia/BlockHook"
9+
10+
s.license = { :type => 'MIT', :file => 'LICENSE' }
11+
s.author = { "YangXiaoyu" => "yulingtianxia@gmail.com" }
12+
s.social_media_url = 'https://twitter.com/yulingtianxia'
13+
s.source = { :git => "https://github.com/yulingtianxia/BlockHook.git", :tag => s.version.to_s }
14+
15+
s.ios.deployment_target = "6.0"
16+
s.osx.deployment_target = "10.7"
17+
s.tvos.deployment_target = "9.0"
18+
s.requires_arc = true
19+
20+
s.source_files = "BlockHook/*.{h,m}"
21+
s.public_header_files = "BlockHook/BlockHook.h"
22+
s.frameworks = 'Foundation'
23+
24+
end

BlockHook/BlockHook.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ typedef NS_ENUM(NSUInteger, BlockHookMode) {
1313
BlockHookModeAfter,
1414
BlockHookModeInstead,
1515
BlockHookModeBefore,
16+
BlockHookModeDead,
1617
};
1718

1819
@class BHToken;
@@ -27,8 +28,6 @@ NS_ASSUME_NONNULL_BEGIN
2728

2829
- (BOOL)remove;
2930

30-
- (void)setBlockDeadCallback:(BHDeadBlock)deadBlock;
31-
3231
@end
3332

3433
@interface NSObject (BlockHook)

BlockHook/BlockHook.m

+26-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
@interface BHDealloc : NSObject
3636

3737
@property (nonatomic, strong) BHToken *token;
38-
@property (nonatomic, copy) BHDeadBlock deadBlock;
38+
@property (nonatomic, nullable, copy) BHDeadBlock deadBlock;
3939

4040
@end
4141

@@ -94,16 +94,35 @@ - (void)dealloc
9494

9595
- (BOOL)remove
9696
{
97+
[self setBlockDeadCallback:nil];
9798
if (_originInvoke) {
9899
if (self.block) {
99100
((__bridge struct _BHBlock *)self.block)->invoke = _originInvoke;
100101
}
102+
#if DEBUG
101103
_originInvoke = NULL;
104+
#endif
102105
return YES;
103106
}
104107
return NO;
105108
}
106109

110+
- (void)setMode:(BlockHookMode)mode
111+
{
112+
_mode = mode;
113+
if (BlockHookModeDead == mode) {
114+
[self setBlockDeadCallback:self.hookBlock];
115+
}
116+
}
117+
118+
- (void)setHookBlock:(id)hookBlock
119+
{
120+
_hookBlock = hookBlock;
121+
if (BlockHookModeDead == self.mode) {
122+
[self setBlockDeadCallback:hookBlock];
123+
}
124+
}
125+
107126
- (void)setBlockDeadCallback:(BHDeadBlock)deadBlock
108127
{
109128
BHDealloc *bhDealloc = objc_getAssociatedObject(self.block, NSSelectorFromString([NSString stringWithFormat:@"%p", self]));
@@ -137,7 +156,12 @@ static void BHFFIClosureFunc(ffi_cif *cif, void *ret, void **args, void *userdat
137156
[token invokeHookBlockWithArgs:args];
138157
}
139158
if (!(BlockHookModeInstead == token.mode && [token invokeHookBlockWithArgs:args])) {
140-
ffi_call(&token->_cif, token->_originInvoke, ret, args);
159+
if (token->_originInvoke) {
160+
ffi_call(&token->_cif, token->_originInvoke, ret, args);
161+
}
162+
else {
163+
NSLog(@"You had lost your originInvoke! Please check the order of removing tokens!");
164+
}
141165
}
142166
if (BlockHookModeAfter == token.mode) {
143167
[token invokeHookBlockWithArgs:args];

BlockHookKit/BlockHookKit.h

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// BlockHookKit.h
3+
// BlockHookKit
4+
//
5+
// Created by 杨萧玉 on 2018/3/23.
6+
// Copyright © 2018年 杨萧玉. All rights reserved.
7+
//
8+
9+
#import <UIKit/UIKit.h>
10+
11+
//! Project version number for BlockHookKit.
12+
FOUNDATION_EXPORT double BlockHookKitVersionNumber;
13+
14+
//! Project version string for BlockHookKit.
15+
FOUNDATION_EXPORT const unsigned char BlockHookKitVersionString[];
16+
17+
// In this header, you should import all the public headers of your framework using statements like #import <BlockHookKit/PublicHeader.h>
18+
19+
#import <BlockHookKit/BlockHook.h>
20+
21+

BlockHookKit/Info.plist

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>$(DEVELOPMENT_LANGUAGE)</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>FMWK</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>1.0</string>
19+
<key>CFBundleVersion</key>
20+
<string>$(CURRENT_PROJECT_VERSION)</string>
21+
<key>NSPrincipalClass</key>
22+
<string></string>
23+
</dict>
24+
</plist>

0 commit comments

Comments
 (0)