撸了一个转发朋友圈的东西。。。有感兴趣的朋友吗?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yivanus
V2EX    微信

撸了一个转发朋友圈的东西。。。有感兴趣的朋友吗??

  •  
  •   yivanus 2016-11-13 20:48:44 +08:00 6482 次点击
    这是一个创建于 3268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    div class="markdown_body">

    有时候吧。需要转发一点收到的信息到朋友圈去。特别是别人发来的图片先下载到本地再去通过朋友圈发出来。 感觉好麻烦。 文字也是一样的需要先复制再去打开朋友圈来粘贴。麻烦死了。

    目前实现的功能,在聊天界面选中要转发的文字或者图片(目前只能一个),然后长按会出现 菜单,选中朋友圈就可以转发到朋友圈,在编辑界面也可以正常的编辑文字或者给图片加上文字描述什么的。

    有人感兴趣的话我就发一下代码。

    29 条回复    2017-01-14 14:15:01 +08:00
    murmur
        1
    murmur  
       2016-11-13 20:51:16 +08:00
    这不就锤子的 1step 么
    fchypzero
        2
    fchypzero  
       2016-11-13 21:00:03 +08:00 via Android
    xposed 不就有转发模块了么
    yivanus
        3
    yivanus  
    OP
       2016-11-13 21:03:56 +08:00
    我说的是 ios 上的啊。所以 xposed 是给 android 用的啊
    yivanus
        4
    yivanus  
    OP
       2016-11-13 21:04:54 +08:00
    用苹果的人不会为了这个功能去买个锤子吧?
    akaayy
        5
    akaayy  
       2016-11-13 21:13:03 +08:00 via Android
    感兴趣 发
    Lonely
        6
    Lonely  
       2016-11-13 21:16:27 +08:00 via iPhone
    直接贴 github 地址呗
    yivanus
        7
    yivanus  
    OP
       2016-11-13 21:25:46 +08:00
    @protocol messageNodeViewDelegate <NSObject>
    - (MMUIViewController *) getViewController;
    @end

    @interface MMTexView : NSObject
    {}
    - (void)setText:(id)arg1;
    @end

    @interface MMGrowTextView : NSObject
    {
    MMTextView *_textView;
    }
    - (void)postTextChangeNotification;
    @end

    @interface WCNewCommitViewController:MMUIViewController
    {
    MMGrowTextView *_textView;
    }
    @property(nonatomic) _Bool bCommmitOnlyText;
    - (id)initWithImages:(id)arg1 contacts:(id)arg2;
    @end

    @interface CMessageWrap:NSObject
    {
    NSString *m_nsContent;
    unsigned int m_uiMessageType;
    }
    @property(nonatomic) unsigned int m_uiMessageType;
    @property(retain, nonatomic) NSString *m_nsContent;
    + (id)getMsgImg:(id)arg1;
    - (_Bool)IsImgMsg;
    - (_Bool)IsTextMsg;
    @end


    @interface BaseMessageNodeView : NSObject
    {
    CMessageWrap *m_oMessageWrap;
    id <messageNodeViewDelegate> m_delegate;
    }
    - (id)m_msgWrap;
    @end

    @interface MMImage : NSObject
    {}
    - (id)initWithImage:(id)arg1;
    - (void)commonInit;
    @end

    int sharetext = 0;
    NSString *sharemsg = @"";

    %hook ImageMessageNodeView
    %new(v@:@)
    - (void)sharetotimeline{
    UIImage *uimage = [%c(CMessageWrap) getMsgImg: MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap")];
    MMImage *mmimage = [[%c(MMImage) alloc] initWithImage:uimage];
    [mmimage commonInit];
    NSMutableArray* array = [[NSMutableArray alloc] initWithObjects:mmimage, nil];

    WCNewCommitViewController *wcvc = [[%c(WCNewCommitViewController) alloc] initWithImages:array contacts:nil];

    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:wcvc];

    id <messageNodeViewDelegate> delegate = MSHookIvar<id>(self,"m_delegate");
    MMUIViewController *vc= [delegate getViewController];
    [vc presentViewController:navC animated:YES completion:nil];
    [wcvc release];
    [navC release];
    }
    %end

    %hook TextMessageNodeView
    %new(v@:@)
    - (void)sharetotimeline{
    %log;

    CMessageWrap *msgwrap = MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap");
    NSString *msgtext =[msgwrap m_nsContent];
    sharemsg = msgtext;
    sharetext = 1;

    WCNewCommitViewController *wcvc = [[%c(WCNewCommitViewController) alloc] initWithImages:nil contacts:nil];

    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:wcvc];
    [wcvc setBCommmitOnlyText:1];

    id <messageNodeViewDelegate> delegate = MSHookIvar<id>(self,"m_delegate");
    MMUIViewController *vc= [delegate getViewController];

    [vc presentViewController:navC animated:YES completion:nil];
    [wcvc release];
    [navC release];
    }
    %end

    %hook WCNewCommitViewController
    - (void)viewDidAppear:(_Bool)arg1{
    if(sharetext){
    MMGrowTextView *grow = MSHookIvar<MMGrowTextView *>(self,"_textView");
    MMTextView *mmtext = MSHookIvar<MMTextView *>(grow,"_textView");
    [mmtext setText:sharemsg];
    [grow postTextChangeNotification];
    sharemsg = @"";
    sharetext = 0;
    }
    }
    %end

    %hook BaseMessageNodeView
    - (void)showOperationMenu:(id)arg1 NeedDelete:(_Bool)arg2 {
    NSLog(@"=======%s",object_getClassName(self));
    CMessageWrap *mw = [self m_msgWrap];
    if([mw IsTextMsg] || [mw IsImgMsg]]){
    NSMutableArray *menuarray = [[NSMutableArray alloc]initWithArray:arg1];
    UIMenuItem *menu_timeline = [[UIMenuItem alloc] initWithTitle:@"朋友圈" action:@selector(sharetotimeline)];
    [menuarray insertObject:menu_timeline atIndex:0];
    [menu_timeline release];
    %orig(menuarray,arg2);
    }else{
    %orig;
    }
    }
    %end


    github 上不去。只好贴这里了。(方便自己发而已)
    designer
        8
    designer  
       2016-11-13 22:06:30 +08:00 via iPhone
    谢谢
    coreki
        9
    coreki  
       2016-11-13 22:37:56 +08:00 via iPhone
    mark ios 使用的?怎么试用
    hewigovens
        10
    hewigovens  
       2016-11-14 07:08:58 +08:00 via iPhone
    嗯,不 hook 微信果然做不到
    yivanus
        11
    yivanus  
    OP
       2016-11-14 09:48:53 +08:00
    @coreki 用 theos 编译一下就可以用了。创建一个新工程,然后把里面的 Tweak.xm 用这个内容替换掉。
    yfmir
        12
    yfmir  
       2016-11-22 09:03:53 +08:00 via iPhone
    mark
    kensla
        13
    kensla  
       2017-01-10 17:01:01 +08:00
    能给份完整的代码研究下吗
    yivanus
        14
    yivanus  
    OP
       2017-01-10 17:47:15 +08:00
    @kensla 这个已经是完整的了。。
    kensla
        15
    kensla  
       2017-01-11 09:07:20 +08:00 via iPhone
    @yivanus 我运行起来是无效果的
    yivanus
        16
    yivanus  
    OP
       2017-01-11 11:50:05 +08:00
    @kensla 越狱手机安装,在聊天对话框里面 长按消息,弹出的菜单中有一个朋友圈。选择朋友圈。
    kensla
        17
    kensla  
       2017-01-11 14:12:07 +08:00
    > Making all for tweak TimeLineTweak …
    ==> Preprocessing Tweak.xm …
    ==> Compiling Tweak.xm (armv7)…
    Tweak.xm:1:38: error: cannot find interface declaration for
    'MMUIViewController', superclass of 'WCNewCommitViewController'; did you
    mean 'UIViewController'?
    @interface WCNewCommitViewController:MMUIViewController
    ^~~~~~~~~~~~~~~~~~
    UIViewController
    kensla
        18
    kensla  
       2017-01-11 14:12:55 +08:00
    直接替换 Tweak.xm 的内容 编译报错了
    kensla
        19
    kensla  
       2017-01-11 14:18:29 +08:00
    6.5.3 版本还能用吗
    yivanus
        20
    yivanus  
    OP
       2017-01-11 18:03:28 +08:00
    @kensla 你这前后茅盾啊。。前面说运行起来没有效果。。。后面又说编译错误。。这就很奇怪了。如果你前面没有编译过又是如何运行起来的?这些代码的编译 如果有问题一开始就会报错。。。
    yivanus
        21
    yivanus  
    OP
       2017-01-11 18:16:07 +08:00
    @interface MMUIViewController : UIViewController
    {
    UINavigationController *m_navigationController;
    }
    @end
    @interface CMessageWrap:NSObject
    {}
    @property(retain, nonatomic) NSString *m_nsContent;
    + (id)getMsgImg:(id)arg1;
    + (id)getMaskedVideoMsgImgThumb:(id)arg1;
    @end
    @protocol messageNodeViewDelegate <NSObject>
    - (MMUIViewController *)getViewController;
    @end
    @interface BaseMessageNodeView : NSObject
    {
    CMessageWrap *m_oMessageWrap;
    id <messageNodeViewDelegate> m_delegate;
    }
    @end
    @interface MMTextView : NSObject
    {}
    - (void)setText:(id)arg1;
    @end
    @interface MMGrowTextView : NSObject
    {
    MMTextView *_textView;
    }
    - (void)postTextChangeNotification;
    @end

    @interface WCNewCommitViewController:MMUIViewController
    {
    MMGrowTextView *_textView;
    }
    @property(nonatomic) _Bool bCommmitOnlyText;
    - (id)initWithImages:(id)arg1 contacts:(id)arg2;
    - (void)OnDone;
    @end

    @interface SightMomentEditViewController : MMUIViewController
    {
    NSString *_realMoviePath;
    NSString *_moviePath;
    UIImage *_thumbImage;
    UIImage *_realThumbImage;
    }
    @property(nonatomic) _Bool directClose;
    @property(nonatomic) _Bool fromDraft;
    @property(retain, nonatomic) NSString *moviePath;
    @property(retain, nonatomic) NSString *realMoviePath;
    @property(retain, nonatomic) UIImage *realThumbImage;
    @property(retain, nonatomic) UIImage *thumbImage;
    - (id)init;
    @end

    @interface ImageMessageNodeView : BaseMessageNodeView
    {}
    - (void)onForward:(id)arg1;
    @end

    @interface MMImage : NSObject
    {}
    - (id)initWithImage:(id)arg1;
    - (void)commonInit;
    @end


    @interface TextMessageNodeView : BaseMessageNodeView
    {}
    - (void)onForward:(id)arg1;
    @end

    @interface VideoMessageNodeView : BaseMessageNodeView
    {
    NSString *m_videoPath;
    }
    - (id)getCoverImage;
    - (id)getMessageImageView;
    - (id)thumbImage;
    - (void)onForward:(id)arg1;
    @end


    int sharetext = 0;
    NSString *sharemsg = @"";

    %hook ImageMessageNodeView
    - (void)onForward:(id)arg1{
    id <messageNodeViewDelegate> delegate = MSHookIvar<id>(self,"m_delegate");
    MMUIViewController *vc= [delegate getViewController];
    UIImage *uimage = [%c(CMessageWrap) getMsgImg: MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap")];
    MMImage *mmimage = [[%c(MMImage) alloc] initWithImage:uimage];
    [mmimage commonInit];
    NSMutableArray* array = [[NSMutableArray alloc] initWithObjects:mmimage, nil];
    WCNewCommitViewController *wcvc = [[%c(WCNewCommitViewController) alloc] initWithImages:array contacts:nil];
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:wcvc];
    [vc presentViewController:navC animated:YES completion:nil];
    [wcvc release];
    [navC release];
    }
    %end



    %hook TextMessageNodeView
    - (void)onForward:(id)arg1{
    %log;
    id <messageNodeViewDelegate> delegate = MSHookIvar<id>(self,"m_delegate");
    MMUIViewController *vc= [delegate getViewController];
    CMessageWrap *msgwrap = MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap");
    NSString *msgtext =[msgwrap m_nsContent];
    sharemsg = msgtext;
    sharetext = 1;
    WCNewCommitViewController *wcvc = [[%c(WCNewCommitViewController) alloc] initWithImages:nil contacts:nil];
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:wcvc];
    [wcvc setBCommmitOnlyText:1];
    [vc presentViewController:navC animated:YES completion:nil];
    [wcvc release];
    [navC release];
    }
    %end

    %hook VideoMessageNodeView
    - (void)onForward:(id)arg1{
    %log;
    SightMomentEditViewController *wcvc = [[%c(SightMomentEditViewController) alloc] init];
    NSLog(@"============all oc init here");
    NSString *vpath=MSHookIvar<NSString *>(self,"m_videoPath");
    NSLog(@"====video path%@",vpath);
    [wcvc setMoviePath:vpath];
    [wcvc setRealMoviePath:vpath];
    [wcvc setThumbImage:[%c(CMessageWrap) getMaskedVideoMsgImgThumb: MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap")]];
    [wcvc setRealThumbImage: [%c(CMessageWrap) getMaskedVideoMsgImgThumb: MSHookIvar<CMessageWrap *>(self,"m_oMessageWrap")]];
    [wcvc setFromDraft:1];
    [wcvc setDirectClose:1];
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:wcvc];
    id <messageNodeViewDelegate> delegate = MSHookIvar<id>(self,"m_delegate");
    MMUIViewController *vc= [delegate getViewController];
    NSLog(@"===%@",vc);
    [vc presentViewController:navC animated:YES completion:nil];
    [wcvc release];
    [navC release];
    }
    %end


    %hook WCNewCommitViewController
    - (id)initWithImages:(id)arg1 contacts:(id)arg2{
    NSLog(@"==%@",arg1);
    %log;
    return %orig;
    }

    - (void)viewDidAppear:(_Bool)arg1{
    if(sharetext){
    MMGrowTextView *grow = MSHookIvar<MMGrowTextView *>(self,"_textView");
    MMTextView *mmtext = MSHookIvar<MMTextView *>(grow,"_textView");
    [mmtext setText:sharemsg];
    [grow postTextChangeNotification];
    sharemsg = @"";
    sharetext = 0;
    }
    }
    %end

    这个是以前的代码。。。。后面自己也不想玩了。可能还有 bug 吧。想玩的就调试下吧。
    kensla
        22
    kensla  
       2017-01-11 19:32:41 +08:00
    @yivanus 这代码编译不了的
    kensla
        23
    kensla  
       2017-01-11 19:56:13 +08:00
    https://git.oschina.net/604217454/timelinetweak.git 这个是代码,方便测试下么
    yivanus
        24
    yivanus  
    OP
       2017-01-11 23:37:01 +08:00
    2017-01-11 23:35:57.780 xcodebuild[8802:302869] [MT] DVTPlugInManager: Required plug-in compatibility UUID E0A62D1F-3C18-4D74-BFE5-A4167D643966 for HHEnumeration-Xcode.ideplugin (com.huaxi.HHEnumeration) not present
    > Making all for tweak timeline …
    ==> Preprocessing Tweak.xm …
    ==> Compiling Tweak.xm (armv7)…
    ==> Linking tweak timeline (armv7)…
    clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7
    ==> Preprocessing Tweak.xm …
    ==> Compiling Tweak.xm (arm64)…
    ==> Linking tweak timeline (arm64)…
    clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of iOS 7
    ==> Merging tweak timeline …
    2017-01-11 23:36:22.202 xcodebuild[9043:303448] [MT] DVTPlugInManager: Required plug-in compatibility UUID E0A62D1F-3C18-4D74-BFE5-A4167D643966 for HHEnumeration-Xcode.ideplugin (com.huaxi.HHEnumeration) not present
    ==> Signing timeline …
    > Making stage for tweak timeline …
    dpkg-deb: warning: deprecated compression type 'lzma'; use xz instead
    dpkg-deb: warning: ignoring 1 warning about the control file(s)
    dpkg-deb: building package 'com.xfunforx.timeline' in './packages/com.xfunforx.timeline_0.0.1-66+debug_iphoneos-arm.deb'.
    yivanus
        25
    yivanus  
    OP
       2017-01-11 23:40:17 +08:00
    @kensla 用你的那段代码编译的
    kensla
        26
    kensla  
       2017-01-12 08:19:41 +08:00 via iPhone
    @yivanus 那个码云的代码可以编译,在 6.5.3 版本没有效果,是不是不能用了?
    yivanus
        27
    yivanus  
    OP
       2017-01-12 21:01:23 +08:00
    @kensla 你一会说不能编译,一会说能编译,到底能不能编译??
    kensla
        28
    kensla  
       2017-01-13 17:58:55 +08:00 via iPhone
    @yivanus 你最开始发的代码不能编译,后面发的我放到开源中国的码云上了,码云那个可以编译。但是装到越狱手机上没有效果
    yivanus
        29
    yivanus  
    OP
       2017-01-14 14:15:01 +08:00
    微信的新版本更新后,有类找不到了。

    Jan 14 14:14:09 maruko WeChat[1501] <Error>: [timeline] Tweak.xm:241 ERROR: logos: nil class ImageMessageNodeView
    Jan 14 14:14:09 maruko WeChat[1501] <Error>: [timeline] Tweak.xm:241 ERROR: logos: nil class TextMessageNodeView
    Jan 14 14:14:09 maruko WeChat[1501] <Error>: [timeline] Tweak.xm:241 ERROR: logos: nil class VideoMessageNodeView
    Jan 14 14:14:09 maruko WeChat[1501] <Error>: [timeline] Tweak.xm:241 ERROR: logos: nil class BaseMessageNodeView
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2615 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:49 PVG 22:49 LAX 07:49 JFK 10:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86